From f96dcdbe67c5e1410e2d52e805c2a3ef985a6d30 Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Thu, 2 Apr 2026 16:57:12 +0700 Subject: [PATCH 01/20] Apply Operations types --- build.gradle | 66 ++++ .../signify/app/Contacting.java | 6 +- .../signify/app/aiding/EventResult.java | 7 +- ...legationOperationResponseDeserializer.java | 50 +++ .../app/config/GeneratedModelConfig.java | 2 + .../signify/app/coring/KeyStates.java | 7 +- .../signify/app/coring/Oobis.java | 5 +- .../signify/app/coring/Operation.java | 74 ----- .../app/coring/OperationDeserializer.java | 132 ++++++++ .../signify/app/coring/Operations.java | 120 +++++-- .../credentials/Credentials.java | 6 +- .../credentials/IssueCredentialResult.java | 4 +- .../credentials/RevokeCredentialResult.java | 4 +- .../signify/app/credentialing/ipex/Ipex.java | 21 +- .../registries/RegistryResult.java | 6 +- .../keria/model/ChallengeOperation.java | 273 +--------------- .../model/CompletedChallengeOperation.java | 3 +- .../model/CompletedCredentialOperation.java | 3 +- .../model/CompletedDelegationOperation.java | 3 +- .../model/CompletedDelegatorOperation.java | 3 +- .../keria/model/CompletedDoneOperation.java | 3 +- .../model/CompletedEndRoleOperation.java | 3 +- .../model/CompletedExchangeOperation.java | 3 +- .../keria/model/CompletedGroupOperation.java | 3 +- .../model/CompletedLocSchemeOperation.java | 3 +- .../keria/model/CompletedOOBIOperation.java | 3 +- .../keria/model/CompletedQueryOperation.java | 3 +- .../model/CompletedRegistryOperation.java | 3 +- .../keria/model/CompletedSubmitOperation.java | 3 +- .../model/CompletedWitnessOperation.java | 3 +- .../keria/model/CredentialOperation.java | 273 +--------------- .../keria/model/DelegationOperation.java | 273 +--------------- .../keria/model/DelegatorOperation.java | 272 +--------------- .../generated/keria/model/DoneOperation.java | 273 +--------------- .../keria/model/EndRoleOperation.java | 273 +--------------- .../keria/model/ExchangeOperation.java | 272 +--------------- .../keria/model/FailedChallengeOperation.java | 3 +- .../model/FailedCredentialOperation.java | 3 +- .../model/FailedDelegationOperation.java | 3 +- .../keria/model/FailedDelegatorOperation.java | 3 +- .../keria/model/FailedDoneOperation.java | 3 +- .../keria/model/FailedEndRoleOperation.java | 3 +- .../keria/model/FailedExchangeOperation.java | 3 +- .../keria/model/FailedGroupOperation.java | 3 +- .../keria/model/FailedLocSchemeOperation.java | 3 +- .../keria/model/FailedOOBIOperation.java | 3 +- .../keria/model/FailedQueryOperation.java | 3 +- .../keria/model/FailedRegistryOperation.java | 3 +- .../keria/model/FailedSubmitOperation.java | 3 +- .../keria/model/FailedWitnessOperation.java | 3 +- .../generated/keria/model/GroupOperation.java | 240 +------------- .../keria/model/LocSchemeOperation.java | 272 +--------------- .../generated/keria/model/OOBIOperation.java | 273 +--------------- .../generated/keria/model/Operation.java | 300 ++---------------- .../model/PendingChallengeOperation.java | 3 +- .../model/PendingCredentialOperation.java | 3 +- .../model/PendingDelegationOperation.java | 3 +- .../model/PendingDelegatorOperation.java | 3 +- .../keria/model/PendingDoneOperation.java | 3 +- .../keria/model/PendingEndRoleOperation.java | 3 +- .../keria/model/PendingExchangeOperation.java | 3 +- .../keria/model/PendingGroupOperation.java | 3 +- .../model/PendingLocSchemeOperation.java | 3 +- .../keria/model/PendingOOBIOperation.java | 3 +- .../keria/model/PendingQueryOperation.java | 3 +- .../keria/model/PendingRegistryOperation.java | 3 +- .../keria/model/PendingSubmitOperation.java | 3 +- .../keria/model/PendingWitnessOperation.java | 3 +- .../generated/keria/model/QueryOperation.java | 273 +--------------- .../keria/model/RegistryOperation.java | 273 +--------------- .../keria/model/SubmitOperation.java | 273 +--------------- .../keria/model/WitnessOperation.java | 273 +--------------- .../signify/app/OperationsTest.java | 152 +++++---- .../signify/e2e/BaseIntegrationTest.java | 13 +- .../signify/e2e/ChallengesTest.java | 36 +-- .../signify/e2e/CredentialsTest.java | 18 +- .../signify/e2e/DelegationMultisigTest.java | 42 ++- .../signify/e2e/DelegationTest.java | 8 +- .../signify/e2e/MultisigHolderTest.java | 19 +- .../signify/e2e/MultisigInceptionTest.java | 16 +- .../signify/e2e/MultisigJoinTest.java | 58 ++-- .../signify/e2e/MultisigTest.java | 60 ++-- .../e2e/MultisigVleiIssuanaceTest.java | 96 +++--- .../signify/e2e/RandyTest.java | 27 +- .../signify/e2e/SaltyTests.java | 30 +- .../signify/e2e/SinglesigDIPTest.java | 23 +- .../signify/e2e/SinglesigDRTTest.java | 20 +- .../signify/e2e/SinglesigIXNTest.java | 15 +- .../signify/e2e/SinglesigROTTest.java | 20 +- .../e2e/SinglesigVleiIssuanceTest.java | 4 +- .../signify/e2e/WitnessTest.java | 1 - .../signify/e2e/utils/MultisigUtils.java | 45 +-- .../signify/e2e/utils/TestUtils.java | 103 +++--- 93 files changed, 942 insertions(+), 4586 deletions(-) create mode 100644 src/main/java/org/cardanofoundation/signify/app/config/CompletedDelegationOperationResponseDeserializer.java delete mode 100644 src/main/java/org/cardanofoundation/signify/app/coring/Operation.java create mode 100644 src/main/java/org/cardanofoundation/signify/app/coring/OperationDeserializer.java diff --git a/build.gradle b/build.gradle index b6b9b305..bd9e04ab 100644 --- a/build.gradle +++ b/build.gradle @@ -249,4 +249,70 @@ tasks.register("prepareOpenApiSpec") { tasks.named("openApiGenerate") { dependsOn("prepareOpenApiSpec") + + doLast { + def ops = [ + "Challenge", "Credential", "Delegation", "Delegator", + "Done", "EndRole", "Exchange", "Group", + "LocScheme", "OOBI", "Query", "Registry", + "Submit", "Witness" + ] + def modelDir = file("src/main/java/org/cardanofoundation/signify/generated/keria/model") + + ops.each { op -> + // Detect metadata type from the Pending variant + def pendingFile = new File(modelDir, "Pending${op}Operation.java") + if (!pendingFile.exists()) { + logger.warn("Pending${op}Operation.java not found, skipping ${op}") + return + } + def metadataMatcher = (pendingFile.text =~ /private\s+(\w+)\s+metadata;/) + def metadataType = metadataMatcher ? metadataMatcher[0][1] : null + + // Add 'implements XxxOperation' to Pending/Completed/Failed classes + // Also add @JsonDeserialize to break inheritance from Operation's custom deserializer + ["Pending", "Completed", "Failed"].each { state -> + def f = new File(modelDir, "${state}${op}Operation.java") + if (f.exists()) { + def className = "${state}${op}Operation" + f.text = f.text.replace( + "public class ${className} {", + "@com.fasterxml.jackson.databind.annotation.JsonDeserialize\npublic final class ${className} implements ${op}Operation {" + ) + } + } + + // Replace the generated merged oneOf class with a sealed interface + def target = new File(modelDir, "${op}Operation.java") + def metadataMethod = metadataType ? "\n ${metadataType} getMetadata();" : "" + target.text = """\ +package org.cardanofoundation.signify.generated.keria.model; + +public sealed interface ${op}Operation extends Operation permits + Pending${op}Operation, + Completed${op}Operation, + Failed${op}Operation { +${metadataMethod} +} +""" + } + + // Generate the general Operation sealed interface (union of all operation types) + def permitsEntries = ops.collect { op -> " ${op}Operation" }.join(",\n") + + def operationFile = new File(modelDir, "Operation.java") + operationFile.text = """\ +package org.cardanofoundation.signify.generated.keria.model; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import org.cardanofoundation.signify.app.coring.OperationDeserializer; + +@JsonDeserialize(using = OperationDeserializer.class) +public sealed interface Operation permits +${permitsEntries} { + + String getName(); +} +""" + } } \ No newline at end of file diff --git a/src/main/java/org/cardanofoundation/signify/app/Contacting.java b/src/main/java/org/cardanofoundation/signify/app/Contacting.java index 6ce678cc..e7548a09 100644 --- a/src/main/java/org/cardanofoundation/signify/app/Contacting.java +++ b/src/main/java/org/cardanofoundation/signify/app/Contacting.java @@ -3,9 +3,9 @@ import com.fasterxml.jackson.core.type.TypeReference; import lombok.Getter; import org.cardanofoundation.signify.app.clienting.SignifyClient; -import org.cardanofoundation.signify.app.coring.Operation; import org.cardanofoundation.signify.cesr.exceptions.LibsodiumException; import org.cardanofoundation.signify.cesr.util.Utils; +import org.cardanofoundation.signify.generated.keria.model.ChallengeOperation; import org.cardanofoundation.signify.generated.keria.model.Challenge; import org.cardanofoundation.signify.generated.keria.model.Contact; import org.cardanofoundation.signify.generated.keria.model.Exn; @@ -91,14 +91,14 @@ public Exn respond(String name, String recipient, List words) throws IOE * @return The long-running operation * @throws Exception if the fetch operation fails */ - public Operation verify(String source, List words) throws LibsodiumException, IOException, InterruptedException { + public ChallengeOperation verify(String source, List words) throws LibsodiumException, IOException, InterruptedException { String path = "/challenges_verify/" + source; String method = "POST"; Map data = new LinkedHashMap<>(); data.put("words", words); HttpResponse response = this.client.fetch(path, method, data); - return Utils.fromJson(response.body(), new TypeReference>() {}); + return Utils.fromJson(response.body(), ChallengeOperation.class); } /** diff --git a/src/main/java/org/cardanofoundation/signify/app/aiding/EventResult.java b/src/main/java/org/cardanofoundation/signify/app/aiding/EventResult.java index 22f2cf3b..94f9641d 100644 --- a/src/main/java/org/cardanofoundation/signify/app/aiding/EventResult.java +++ b/src/main/java/org/cardanofoundation/signify/app/aiding/EventResult.java @@ -1,13 +1,16 @@ package org.cardanofoundation.signify.app.aiding; +import java.io.IOException; import java.net.http.HttpResponse; import java.util.List; import org.cardanofoundation.signify.cesr.Serder; +import org.cardanofoundation.signify.cesr.util.Utils; +import org.cardanofoundation.signify.generated.keria.model.Operation; public record EventResult(Serder serder, List sigs, HttpResponse response) { - public Object op() { - return response.body(); + public Operation op() throws IOException { + return Utils.fromJson(response.body(), Operation.class); } } \ No newline at end of file diff --git a/src/main/java/org/cardanofoundation/signify/app/config/CompletedDelegationOperationResponseDeserializer.java b/src/main/java/org/cardanofoundation/signify/app/config/CompletedDelegationOperationResponseDeserializer.java new file mode 100644 index 00000000..af5e49a0 --- /dev/null +++ b/src/main/java/org/cardanofoundation/signify/app/config/CompletedDelegationOperationResponseDeserializer.java @@ -0,0 +1,50 @@ +package org.cardanofoundation.signify.app.config; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import org.cardanofoundation.signify.generated.keria.model.CompletedDelegationOperationResponse; +import org.cardanofoundation.signify.generated.keria.model.ICPV1Kt; +import org.cardanofoundation.signify.generated.keria.model.KeyStateRecordKt; + +import java.io.IOException; + +/** + * Deserializes {@link CompletedDelegationOperationResponse} handling both object and string forms. + * KERIA returns a full key-event object for delegation inception but a plain SAID string + * for delegation approval (IXN) operations. + */ +class CompletedDelegationOperationResponseDeserializer extends JsonDeserializer { + + /** + * Mapper without our CompletedDelegationOperationResponse deserializer (avoids recursion) + * but with all other custom deserializers needed for nested fields (e.g. ICPV1Kt). + */ + private static final ObjectMapper FALLBACK_MAPPER; + + static { + FALLBACK_MAPPER = new ObjectMapper(); + FALLBACK_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + SimpleModule module = new SimpleModule("FallbackModule"); + module.addDeserializer(ICPV1Kt.class, new ICPV1KtDeserializer()); + module.addDeserializer(KeyStateRecordKt.class, new KeyStateRecordKtDeserializer()); + FALLBACK_MAPPER.registerModule(module); + } + + @Override + public CompletedDelegationOperationResponse deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + if (p.currentToken() == JsonToken.VALUE_STRING) { + CompletedDelegationOperationResponse response = new CompletedDelegationOperationResponse(); + response.setD(p.getText()); + return response; + } + // Use a mapper with nested custom deserializers but without ours to avoid infinite recursion + JsonNode tree = p.getCodec().readTree(p); + return FALLBACK_MAPPER.treeToValue(tree, CompletedDelegationOperationResponse.class); + } +} diff --git a/src/main/java/org/cardanofoundation/signify/app/config/GeneratedModelConfig.java b/src/main/java/org/cardanofoundation/signify/app/config/GeneratedModelConfig.java index 8ae3da82..945c259e 100644 --- a/src/main/java/org/cardanofoundation/signify/app/config/GeneratedModelConfig.java +++ b/src/main/java/org/cardanofoundation/signify/app/config/GeneratedModelConfig.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import org.cardanofoundation.signify.generated.keria.model.CredentialState; +import org.cardanofoundation.signify.generated.keria.model.CompletedDelegationOperationResponse; import org.cardanofoundation.signify.generated.keria.model.ICPV1Kt; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecordKt; import org.openapitools.jackson.nullable.JsonNullableModule; @@ -26,6 +27,7 @@ public static void configure(ObjectMapper mapper) { SimpleModule module = new SimpleModule("GeneratedModelModule"); module.addDeserializer(ICPV1Kt.class, new ICPV1KtDeserializer()); module.addDeserializer(KeyStateRecordKt.class, new KeyStateRecordKtDeserializer()); + module.addDeserializer(CompletedDelegationOperationResponse.class, new CompletedDelegationOperationResponseDeserializer()); mapper.registerModule(module); } } diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/KeyStates.java b/src/main/java/org/cardanofoundation/signify/app/coring/KeyStates.java index 8666931e..cb4a4821 100644 --- a/src/main/java/org/cardanofoundation/signify/app/coring/KeyStates.java +++ b/src/main/java/org/cardanofoundation/signify/app/coring/KeyStates.java @@ -4,6 +4,7 @@ import org.cardanofoundation.signify.cesr.exceptions.LibsodiumException; import org.cardanofoundation.signify.cesr.util.Utils; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; +import org.cardanofoundation.signify.generated.keria.model.QueryOperation; import java.io.IOException; import java.net.HttpURLConnection; @@ -67,7 +68,7 @@ public List list(List pres) throws LibsodiumException, I * @return A map representing the long-running operation * @throws Exception if the fetch operation fails */ - public Object query(String pre, String sn, Object anchor) throws LibsodiumException, IOException, InterruptedException { + public QueryOperation query(String pre, String sn, Object anchor) throws LibsodiumException, IOException, InterruptedException { String path = "/queries"; Map data = new LinkedHashMap<>(); data.put("pre", pre); @@ -79,10 +80,10 @@ public Object query(String pre, String sn, Object anchor) throws LibsodiumExcept } String method = "POST"; HttpResponse res = this.client.fetch(path, method, data); - return Utils.fromJson(res.body(), Object.class); + return Utils.fromJson(res.body(), QueryOperation.class); } - public Object query(String pre, String sn) throws Exception { + public QueryOperation query(String pre, String sn) throws LibsodiumException, IOException, InterruptedException { return query(pre, sn, null); } } diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/Oobis.java b/src/main/java/org/cardanofoundation/signify/app/coring/Oobis.java index af2f34fc..bb58e564 100644 --- a/src/main/java/org/cardanofoundation/signify/app/coring/Oobis.java +++ b/src/main/java/org/cardanofoundation/signify/app/coring/Oobis.java @@ -12,6 +12,7 @@ import org.cardanofoundation.signify.cesr.exceptions.LibsodiumException; import org.cardanofoundation.signify.cesr.util.Utils; import org.cardanofoundation.signify.generated.keria.model.OOBI; +import org.cardanofoundation.signify.generated.keria.model.OOBIOperation; public class Oobis { private final SignifyClient client; @@ -53,7 +54,7 @@ public Optional get(String name, String role) throws IOException, Interrup * @throws JsonProcessingException if there is an error processing the JSON * @throws LibsodiumException if there is an error in the cryptographic operations */ - public Object resolve(String oobi, String alias) throws IOException, InterruptedException, LibsodiumException { + public OOBIOperation resolve(String oobi, String alias) throws IOException, InterruptedException, LibsodiumException { String path = "/oobis"; String method = "POST"; @@ -63,6 +64,6 @@ public Object resolve(String oobi, String alias) throws IOException, Interrupted data.put("oobialias", alias); } HttpResponse response = this.client.fetch(path, method, data); - return Utils.fromJson(response.body(), Object.class); + return Utils.fromJson(response.body(), OOBIOperation.class); } } \ No newline at end of file diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/Operation.java b/src/main/java/org/cardanofoundation/signify/app/coring/Operation.java deleted file mode 100644 index 4f67c11d..00000000 --- a/src/main/java/org/cardanofoundation/signify/app/coring/Operation.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.cardanofoundation.signify.app.coring; - -import lombok.*; -import org.cardanofoundation.signify.cesr.util.Utils; - -import java.util.Map; - -@Getter -@Setter -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class Operation { - - String name; - Metadata metadata; - boolean done; - Object error; - T response; - - @Getter - @Setter - @Builder - @NoArgsConstructor - @AllArgsConstructor - public static class Metadata { - Operation depends; - Map properties; - } - - public static Operation fromObject(Object obj) { - OperationBuilder resultBuilder = Operation.builder(); - - if (obj instanceof Operation operation) { - return (Operation) operation; - } - else if (obj instanceof Map map) { - resultBuilder - .name(map.containsKey("name") ? (String) map.get("name") : null) - .metadata(convertMetadata(map.get("metadata"))) - .done(map.containsKey("done") && (boolean) map.get("done")) - .error(map.getOrDefault("error", null)) - .response(map.containsKey("response") ? (R) map.get("response") : null); - } else if(obj instanceof String) { // json string - Map mapObj = Utils.fromJson((String) obj, Map.class); - return fromObject(mapObj); - } - else { - throw new IllegalArgumentException("Object is neither an Operation instance nor a Map"); - } - - return resultBuilder.build(); - } - - private static Metadata convertMetadata(Object metadataObj) { - if (metadataObj == null) { - return null; - } - if (metadataObj instanceof Metadata) { - return (Metadata) metadataObj; - } - if (metadataObj instanceof Map map) { - Map properties = map.containsKey("properties") - ? (Map) map.get("properties") - : (Map) map; - - return Metadata.builder() - .depends(map.get("depends") != null ? fromObject(map.get("depends")) : null) - .properties(properties) - .build(); - } - throw new IllegalArgumentException("Metadata object is neither a Metadata instance nor a Map"); - } -} diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/OperationDeserializer.java b/src/main/java/org/cardanofoundation/signify/app/coring/OperationDeserializer.java new file mode 100644 index 00000000..4ec3fbfc --- /dev/null +++ b/src/main/java/org/cardanofoundation/signify/app/coring/OperationDeserializer.java @@ -0,0 +1,132 @@ +package org.cardanofoundation.signify.app.coring; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.databind.deser.ContextualDeserializer; +import org.cardanofoundation.signify.generated.keria.model.*; + +import java.io.IOException; +import java.util.Map; + +public class OperationDeserializer extends JsonDeserializer implements ContextualDeserializer { + + private enum OperationType { + CHALLENGE(PendingChallengeOperation.class, CompletedChallengeOperation.class, FailedChallengeOperation.class), + CREDENTIAL(PendingCredentialOperation.class, CompletedCredentialOperation.class, FailedCredentialOperation.class), + DELEGATION(PendingDelegationOperation.class, CompletedDelegationOperation.class, FailedDelegationOperation.class), + DELEGATOR(PendingDelegatorOperation.class, CompletedDelegatorOperation.class, FailedDelegatorOperation.class), + DONE(PendingDoneOperation.class, CompletedDoneOperation.class, FailedDoneOperation.class), + ENDROLE(PendingEndRoleOperation.class, CompletedEndRoleOperation.class, FailedEndRoleOperation.class), + EXCHANGE(PendingExchangeOperation.class, CompletedExchangeOperation.class, FailedExchangeOperation.class), + GROUP(PendingGroupOperation.class, CompletedGroupOperation.class, FailedGroupOperation.class), + LOCSCHEME(PendingLocSchemeOperation.class, CompletedLocSchemeOperation.class, FailedLocSchemeOperation.class), + OOBI(PendingOOBIOperation.class, CompletedOOBIOperation.class, FailedOOBIOperation.class), + QUERY(PendingQueryOperation.class, CompletedQueryOperation.class, FailedQueryOperation.class), + REGISTRY(PendingRegistryOperation.class, CompletedRegistryOperation.class, FailedRegistryOperation.class), + SUBMIT(PendingSubmitOperation.class, CompletedSubmitOperation.class, FailedSubmitOperation.class), + WITNESS(PendingWitnessOperation.class, CompletedWitnessOperation.class, FailedWitnessOperation.class); + + final Class pending; + final Class completed; + final Class failed; + + OperationType(Class pending, Class completed, Class failed) { + this.pending = pending; + this.completed = completed; + this.failed = failed; + } + } + + private static final Map PREFIX_MAP = Map.ofEntries( + Map.entry("challenge", OperationType.CHALLENGE), + Map.entry("credential", OperationType.CREDENTIAL), + Map.entry("delegation", OperationType.DELEGATION), + Map.entry("delegator", OperationType.DELEGATOR), + Map.entry("done", OperationType.DONE), + Map.entry("endrole", OperationType.ENDROLE), + Map.entry("exchange", OperationType.EXCHANGE), + Map.entry("group", OperationType.GROUP), + Map.entry("locscheme", OperationType.LOCSCHEME), + Map.entry("oobi", OperationType.OOBI), + Map.entry("query", OperationType.QUERY), + Map.entry("registry", OperationType.REGISTRY), + Map.entry("submit", OperationType.SUBMIT), + Map.entry("witness", OperationType.WITNESS) + ); + + private static final Map, OperationType> INTERFACE_MAP = Map.ofEntries( + Map.entry(ChallengeOperation.class, OperationType.CHALLENGE), + Map.entry(CredentialOperation.class, OperationType.CREDENTIAL), + Map.entry(DelegationOperation.class, OperationType.DELEGATION), + Map.entry(DelegatorOperation.class, OperationType.DELEGATOR), + Map.entry(DoneOperation.class, OperationType.DONE), + Map.entry(EndRoleOperation.class, OperationType.ENDROLE), + Map.entry(ExchangeOperation.class, OperationType.EXCHANGE), + Map.entry(GroupOperation.class, OperationType.GROUP), + Map.entry(LocSchemeOperation.class, OperationType.LOCSCHEME), + Map.entry(OOBIOperation.class, OperationType.OOBI), + Map.entry(QueryOperation.class, OperationType.QUERY), + Map.entry(RegistryOperation.class, OperationType.REGISTRY), + Map.entry(SubmitOperation.class, OperationType.SUBMIT), + Map.entry(WitnessOperation.class, OperationType.WITNESS) + ); + + private final OperationType fixedType; + + public OperationDeserializer() { + this.fixedType = null; + } + + private OperationDeserializer(OperationType fixedType) { + this.fixedType = fixedType; + } + + @Override + public JsonDeserializer createContextual(DeserializationContext ctxt, BeanProperty property) throws JsonMappingException { + JavaType type = ctxt.getContextualType(); + if (type != null) { + OperationType opType = INTERFACE_MAP.get(type.getRawClass()); + if (opType != null) { + return new OperationDeserializer(opType); + } + } + return this; + } + + @Override + public Operation deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + JsonNode node = p.readValueAsTree(); + + OperationType opType = fixedType; + if (opType == null) { + String name = node.has("name") ? node.get("name").asText() : null; + opType = resolveFromPrefix(name); + if (opType == null) { + throw new IOException("Cannot determine operation type from name: " + name + + ". Expected format: . where type is one of: " + PREFIX_MAP.keySet()); + } + } + + // Determine state: response → completed, error → failed, otherwise → pending + Class concreteType; + if (node.has("response") && !node.get("response").isNull()) { + concreteType = opType.completed; + } else if (node.has("error") && !node.get("error").isNull()) { + concreteType = opType.failed; + } else { + concreteType = opType.pending; + } + + JsonParser nodeParser = node.traverse(p.getCodec()); + nodeParser.nextToken(); + return ctxt.readValue(nodeParser, concreteType); + } + + private static OperationType resolveFromPrefix(String name) { + if (name == null || !name.contains(".")) { + return null; + } + String prefix = name.substring(0, name.indexOf('.')).toLowerCase(); + return PREFIX_MAP.get(prefix); + } +} diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java b/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java index 6cf99375..5b121126 100644 --- a/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java +++ b/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java @@ -5,11 +5,13 @@ import org.cardanofoundation.signify.app.coring.deps.OperationsDeps; import org.cardanofoundation.signify.cesr.exceptions.LibsodiumException; import org.cardanofoundation.signify.cesr.util.Utils; +import org.cardanofoundation.signify.generated.keria.model.Operation; import java.io.IOException; import java.net.HttpURLConnection; import java.net.http.HttpResponse; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.concurrent.atomic.AtomicBoolean; @@ -21,71 +23,114 @@ public Operations(OperationsDeps client) { } /** - * Get operation by name + * Get operation by name, deserialized into a specific type. * * @param name Name or ID of the operation to retrieve - * @return Optional containing the operation if found, or empty if not found - * @throws IOException if an I/O error occurs - * @throws InterruptedException if the operation is interrupted - * @throws LibsodiumException if a Sodium error occurs + * @param type The target class to deserialize into (e.g., CredentialOperation.class) + * @return Optional containing the typed operation if found, or empty if not found */ - public Optional> get(String name) throws IOException, InterruptedException, LibsodiumException { + public Optional get(String name, Class type) throws IOException, InterruptedException, LibsodiumException { String path = "/operations/" + name; - String method = "GET"; - HttpResponse response = this.client.fetch(path, method, null); - + HttpResponse response = this.client.fetch(path, "GET", null); + if (response.statusCode() == HttpURLConnection.HTTP_NOT_FOUND) { return Optional.empty(); } - - return Optional.of(Utils.fromJson(response.body(), new TypeReference<>() {})); + + return Optional.of(Utils.fromJson(response.body(), type)); + } + + /** + * Get operation by name, deserialized into the general Operation union type. + * + * @param name Name or ID of the operation to retrieve + * @return Optional containing the Operation if found, or empty if not found + */ + public Optional get(String name) throws IOException, InterruptedException, LibsodiumException { + return get(name, Operation.class); } - public List> list(String type) throws IOException, InterruptedException, LibsodiumException { + /** + * List operations, deserialized into the general Operation union type. + */ + public List list(String type) throws IOException, InterruptedException, LibsodiumException { String path = "/operations" + (type != null ? "?type=" + type : ""); - String method = "GET"; - HttpResponse response = this.client.fetch(path, method, null); + HttpResponse response = this.client.fetch(path, "GET", null); return Utils.fromJson(response.body(), new TypeReference<>() {}); } + /** + * List all operations. + */ + public List list() throws IOException, InterruptedException, LibsodiumException { + return list(null); + } + public void delete(String name) throws IOException, InterruptedException, LibsodiumException { String path = "/operations/" + name; - String method = "DELETE"; - this.client.fetch(path, method, null); + this.client.fetch(path, "DELETE", null); } - public Operation wait(Operation op) throws IOException, InterruptedException, LibsodiumException { - return wait(op, WaitOptions.builder().build(), System.currentTimeMillis()); + /** + * Wait for an operation to complete, returning the result as the general Operation union type. + * + * @param operationName The name of the operation to wait for + */ + public Operation wait(String operationName) throws IOException, InterruptedException, LibsodiumException { + return wait(operationName, Operation.class, WaitOptions.builder().build(), System.currentTimeMillis()); + } + + /** + * Wait for an operation to complete, returning the result deserialized into the given type. + * Handles dependent operations automatically. + * + * @param operationName The name of the operation to wait for + * @param resultType The target class to deserialize the final result into (e.g., CredentialOperation.class) + */ + public T wait(String operationName, Class resultType) throws IOException, InterruptedException, LibsodiumException { + return wait(operationName, resultType, WaitOptions.builder().build(), System.currentTimeMillis()); } - public Operation wait(Operation op, WaitOptions options) throws IOException, InterruptedException, LibsodiumException { - return wait(op, options, System.currentTimeMillis()); + public T wait(String operationName, Class resultType, WaitOptions options) throws IOException, InterruptedException, LibsodiumException { + return wait(operationName, resultType, options, System.currentTimeMillis()); } - public Operation wait(Operation op, WaitOptions options, long startingTime) throws IOException, InterruptedException, LibsodiumException { + @SuppressWarnings("unchecked") + private T wait(String operationName, Class resultType, WaitOptions options, long startingTime) throws IOException, InterruptedException, LibsodiumException { int minSleep = options.getMinSleep(); int maxSleep = options.getMaxSleep(); int increaseFactor = options.getIncreaseFactor(); - if (op.getMetadata() != null && op.getMetadata().getDepends() != null && !op.getMetadata().getDepends().isDone()) { - wait(op.getMetadata().getDepends(), options, startingTime); - } + // First fetch to check depends and initial state + Map json = get(operationName, Map.class) + .orElseThrow(() -> new IOException("Operation not found: " + operationName)); + + // Wait on dependencies first + waitOnDepends(json, options, startingTime); - if (op.isDone()) { - return op; + if (Boolean.TRUE.equals(json.get("done"))) { + if (resultType == Map.class) { + return (T) json; + } + return get(operationName, resultType) + .orElseThrow(() -> new IOException("Operation not found: " + operationName)); } int retries = 0; while (true) { - String opName = op.getName(); - op = this.get(opName).orElseThrow(() -> new IllegalArgumentException("Operation not found: " + opName)); + json = get(operationName, Map.class) + .orElseThrow(() -> new IOException("Operation not found: " + operationName)); int delay = Math.max(minSleep, Math.min(maxSleep, (int) Math.pow(2, retries) * increaseFactor)); retries++; - if (op.isDone()) { - return op; + if (Boolean.TRUE.equals(json.get("done"))) { + if (resultType == Map.class) { + return (T) json; + } + return get(operationName, resultType) + .orElseThrow(() -> new IOException("Operation not found: " + operationName)); } Thread.sleep(delay); @@ -100,6 +145,21 @@ public Operation wait(Operation op, WaitOptions options, long starting } } + @SuppressWarnings("unchecked") + private void waitOnDepends(Map operationJson, WaitOptions options, long startingTime) throws IOException, InterruptedException, LibsodiumException { + Object metadata = operationJson.get("metadata"); + if (metadata instanceof Map metaMap) { + Object depends = metaMap.get("depends"); + if (depends instanceof Map depMap) { + String depName = (String) depMap.get("name"); + Boolean depDone = depMap.get("done") instanceof Boolean b ? b : null; + if (depName != null && !Boolean.TRUE.equals(depDone)) { + wait(depName, Map.class, options, startingTime); + } + } + } + } + @Builder @Getter @Setter diff --git a/src/main/java/org/cardanofoundation/signify/app/credentialing/credentials/Credentials.java b/src/main/java/org/cardanofoundation/signify/app/credentialing/credentials/Credentials.java index 80fc779a..98e9b87b 100644 --- a/src/main/java/org/cardanofoundation/signify/app/credentialing/credentials/Credentials.java +++ b/src/main/java/org/cardanofoundation/signify/app/credentialing/credentials/Credentials.java @@ -1,8 +1,8 @@ package org.cardanofoundation.signify.app.credentialing.credentials; import com.fasterxml.jackson.core.type.TypeReference; -import org.cardanofoundation.signify.app.coring.Operation; import org.cardanofoundation.signify.app.clienting.SignifyClient; +import org.cardanofoundation.signify.generated.keria.model.CredentialOperation; import org.cardanofoundation.signify.cesr.Keeping; import org.cardanofoundation.signify.cesr.Saider; import org.cardanofoundation.signify.cesr.Serder; @@ -180,7 +180,7 @@ public IssueCredentialResult issue(String name, CredentialData args) throws IOEx body.put(keeper.getAlgo().getValue(), keeper.getParams().toMap()); HttpResponse response = this.client.fetch(path, method, body); - Operation op = Operation.fromObject(Utils.fromJson(response.body(), Map.class)); + CredentialOperation op = Utils.fromJson(response.body(), CredentialOperation.class); return new IssueCredentialResult(new Serder(acdc), new Serder(iss), anc, op); } @@ -257,7 +257,7 @@ public RevokeCredentialResult revoke(String name, String said, String datetime) String path = "/identifiers/" + name + "/credentials/" + said; String method = "DELETE"; HttpResponse response = this.client.fetch(path, method, body); - Operation op = Operation.fromObject(Utils.fromJson(response.body(), Map.class)); + CredentialOperation op = Utils.fromJson(response.body(), CredentialOperation.class); return new RevokeCredentialResult(new Serder(ixn), new Serder(rev), op); } diff --git a/src/main/java/org/cardanofoundation/signify/app/credentialing/credentials/IssueCredentialResult.java b/src/main/java/org/cardanofoundation/signify/app/credentialing/credentials/IssueCredentialResult.java index df6a6f53..1840b149 100644 --- a/src/main/java/org/cardanofoundation/signify/app/credentialing/credentials/IssueCredentialResult.java +++ b/src/main/java/org/cardanofoundation/signify/app/credentialing/credentials/IssueCredentialResult.java @@ -1,8 +1,8 @@ package org.cardanofoundation.signify.app.credentialing.credentials; import lombok.*; -import org.cardanofoundation.signify.app.coring.Operation; import org.cardanofoundation.signify.cesr.Serder; +import org.cardanofoundation.signify.generated.keria.model.CredentialOperation; @Getter @Setter @@ -14,5 +14,5 @@ public class IssueCredentialResult { private Serder acdc; private Serder iss; private Serder anc; - private Operation op; + private CredentialOperation op; } diff --git a/src/main/java/org/cardanofoundation/signify/app/credentialing/credentials/RevokeCredentialResult.java b/src/main/java/org/cardanofoundation/signify/app/credentialing/credentials/RevokeCredentialResult.java index 03e137de..88fe307e 100644 --- a/src/main/java/org/cardanofoundation/signify/app/credentialing/credentials/RevokeCredentialResult.java +++ b/src/main/java/org/cardanofoundation/signify/app/credentialing/credentials/RevokeCredentialResult.java @@ -3,8 +3,8 @@ import lombok.Builder; import lombok.Getter; import lombok.Setter; -import org.cardanofoundation.signify.app.coring.Operation; import org.cardanofoundation.signify.cesr.Serder; +import org.cardanofoundation.signify.generated.keria.model.CredentialOperation; @Getter @Setter @@ -12,5 +12,5 @@ public class RevokeCredentialResult { private Serder anc; private Serder rev; - private Operation op; + private CredentialOperation op; } diff --git a/src/main/java/org/cardanofoundation/signify/app/credentialing/ipex/Ipex.java b/src/main/java/org/cardanofoundation/signify/app/credentialing/ipex/Ipex.java index f3588b39..2b9945e9 100644 --- a/src/main/java/org/cardanofoundation/signify/app/credentialing/ipex/Ipex.java +++ b/src/main/java/org/cardanofoundation/signify/app/credentialing/ipex/Ipex.java @@ -15,6 +15,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import org.cardanofoundation.signify.generated.keria.model.ExchangeOperation; import org.cardanofoundation.signify.generated.keria.model.HabState; public class Ipex { @@ -45,7 +46,7 @@ public Exchanging.ExchangeMessageResult apply(IpexApplyArgs args) throws Interru ); } - public Object submitApply(String name, Serder exn, List sigs, List recp) throws IOException, InterruptedException, LibsodiumException { + public ExchangeOperation submitApply(String name, Serder exn, List sigs, List recp) throws IOException, InterruptedException, LibsodiumException { Map body = new LinkedHashMap<>(); body.put("exn", exn.getKed()); body.put("sigs", sigs); @@ -56,7 +57,7 @@ public Object submitApply(String name, Serder exn, List sigs, List sigs, String atc, List recp) throws IOException, InterruptedException, LibsodiumException { + public ExchangeOperation submitOffer(String name, Serder exn, List sigs, String atc, List recp) throws IOException, InterruptedException, LibsodiumException { Map body = new LinkedHashMap<>(); body.put("exn", exn.getKed()); body.put("sigs", sigs); @@ -96,7 +97,7 @@ public Object submitOffer(String name, Serder exn, List sigs, String atc "POST", body ); - return Utils.fromJson(response.body(), Object.class); + return Utils.fromJson(response.body(), ExchangeOperation.class); } /** @@ -121,7 +122,7 @@ public Exchanging.ExchangeMessageResult agree(IpexAgreeArgs args) throws Interru ); } - public Object submitAgree(String name, Serder exn, List sigs, List recp) throws IOException, InterruptedException, LibsodiumException { + public ExchangeOperation submitAgree(String name, Serder exn, List sigs, List recp) throws IOException, InterruptedException, LibsodiumException { Map body = new LinkedHashMap<>(); body.put("exn", exn.getKed()); body.put("sigs", sigs); @@ -132,7 +133,7 @@ public Object submitAgree(String name, Serder exn, List sigs, List sigs, String atc, List recp) throws IOException, InterruptedException, LibsodiumException { + public ExchangeOperation submitGrant(String name, Serder exn, List sigs, String atc, List recp) throws IOException, InterruptedException, LibsodiumException { Map body = Map.of( "exn", exn.getKed(), "sigs", sigs, @@ -188,7 +189,7 @@ public Object submitGrant(String name, Serder exn, List sigs, String atc "POST", body ); - return Utils.fromJson(response.body(), Object.class); + return Utils.fromJson(response.body(), ExchangeOperation.class); } /** @@ -213,7 +214,7 @@ public Exchanging.ExchangeMessageResult admit(IpexAdmitArgs args) throws Interru ); } - public Object submitAdmit(String name, Serder exn, List sigs, String atc, List recp) throws IOException, InterruptedException, LibsodiumException { + public ExchangeOperation submitAdmit(String name, Serder exn, List sigs, String atc, List recp) throws IOException, InterruptedException, LibsodiumException { Map body = new LinkedHashMap<>(); body.put("exn", exn.getKed()); body.put("sigs", sigs); @@ -225,6 +226,6 @@ public Object submitAdmit(String name, Serder exn, List sigs, String atc "POST", body ); - return Utils.fromJson(response.body(), Object.class); + return Utils.fromJson(response.body(), ExchangeOperation.class); } } \ No newline at end of file diff --git a/src/main/java/org/cardanofoundation/signify/app/credentialing/registries/RegistryResult.java b/src/main/java/org/cardanofoundation/signify/app/credentialing/registries/RegistryResult.java index f1850990..49fa282f 100644 --- a/src/main/java/org/cardanofoundation/signify/app/credentialing/registries/RegistryResult.java +++ b/src/main/java/org/cardanofoundation/signify/app/credentialing/registries/RegistryResult.java @@ -3,6 +3,8 @@ import lombok.Getter; import lombok.Setter; import org.cardanofoundation.signify.cesr.Serder; +import org.cardanofoundation.signify.cesr.util.Utils; +import org.cardanofoundation.signify.generated.keria.model.RegistryOperation; import java.net.http.HttpResponse; import java.util.List; @@ -22,7 +24,7 @@ public RegistryResult(Serder regser, Serder serder, List sigs, HttpRespo this.response = response; } - public String op() { - return response.body(); + public RegistryOperation op() { + return Utils.fromJson(response.body(), RegistryOperation.class); } } \ No newline at end of file diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/ChallengeOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/ChallengeOperation.java index cfe01a20..3c6f39da 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/ChallengeOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/ChallengeOperation.java @@ -1,272 +1,9 @@ -/* - * KERIA Interactive Web Interface API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 1.0.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - package org.cardanofoundation.signify.generated.keria.model; -import java.util.Objects; -import java.util.Arrays; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.annotation.JsonValue; -import org.cardanofoundation.signify.generated.keria.model.ChallengeOperationMetadata; -import org.cardanofoundation.signify.generated.keria.model.ChallengeOperationResponse; -import org.cardanofoundation.signify.generated.keria.model.CompletedChallengeOperation; -import org.cardanofoundation.signify.generated.keria.model.FailedChallengeOperation; -import org.cardanofoundation.signify.generated.keria.model.OperationStatus; -import org.cardanofoundation.signify.generated.keria.model.PendingChallengeOperation; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonTypeName; - -/** - * ChallengeOperation - */ -@JsonPropertyOrder({ - ChallengeOperation.JSON_PROPERTY_NAME, - ChallengeOperation.JSON_PROPERTY_METADATA, - ChallengeOperation.JSON_PROPERTY_DONE, - ChallengeOperation.JSON_PROPERTY_RESPONSE, - ChallengeOperation.JSON_PROPERTY_ERROR -}) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class ChallengeOperation { - public static final String JSON_PROPERTY_NAME = "name"; - @jakarta.annotation.Nonnull - private String name; - - public static final String JSON_PROPERTY_METADATA = "metadata"; - @jakarta.annotation.Nullable - private ChallengeOperationMetadata metadata; - - /** - * Gets or Sets done - */ - public enum DoneEnum { - TRUE(Boolean.valueOf("true")); - - private Boolean value; - - DoneEnum(Boolean value) { - this.value = value; - } - - @JsonValue - public Boolean getValue() { - return value; - } - - @Override - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static DoneEnum fromValue(Boolean value) { - for (DoneEnum b : DoneEnum.values()) { - if (b.value.equals(value)) { - return b; - } - } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); - } - } - - public static final String JSON_PROPERTY_DONE = "done"; - @jakarta.annotation.Nonnull - private DoneEnum done; - - public static final String JSON_PROPERTY_RESPONSE = "response"; - @jakarta.annotation.Nonnull - private ChallengeOperationResponse response; - - public static final String JSON_PROPERTY_ERROR = "error"; - @jakarta.annotation.Nonnull - private OperationStatus error; - - public ChallengeOperation() { - } - - public ChallengeOperation name(@jakarta.annotation.Nonnull String name) { - - this.name = name; - return this; - } - - /** - * Get name - * @return name - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getName() { - return name; - } - - - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setName(@jakarta.annotation.Nonnull String name) { - this.name = name; - } - - public ChallengeOperation metadata(@jakarta.annotation.Nullable ChallengeOperationMetadata metadata) { - - this.metadata = metadata; - return this; - } - - /** - * Get metadata - * @return metadata - */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - - public ChallengeOperationMetadata getMetadata() { - return metadata; - } - - - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMetadata(@jakarta.annotation.Nullable ChallengeOperationMetadata metadata) { - this.metadata = metadata; - } - - public ChallengeOperation done(@jakarta.annotation.Nonnull DoneEnum done) { - - this.done = done; - return this; - } - - /** - * Get done - * @return done - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneEnum getDone() { - return done; - } - - - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDone(@jakarta.annotation.Nonnull DoneEnum done) { - this.done = done; - } - - public ChallengeOperation response(@jakarta.annotation.Nonnull ChallengeOperationResponse response) { - - this.response = response; - return this; - } - - /** - * Get response - * @return response - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public ChallengeOperationResponse getResponse() { - return response; - } - - - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setResponse(@jakarta.annotation.Nonnull ChallengeOperationResponse response) { - this.response = response; - } - - public ChallengeOperation error(@jakarta.annotation.Nonnull OperationStatus error) { - - this.error = error; - return this; - } - - /** - * Get error - * @return error - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public OperationStatus getError() { - return error; - } - - - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setError(@jakarta.annotation.Nonnull OperationStatus error) { - this.error = error; - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ChallengeOperation challengeOperation = (ChallengeOperation) o; - return Objects.equals(this.name, challengeOperation.name) && - Objects.equals(this.metadata, challengeOperation.metadata) && - Objects.equals(this.done, challengeOperation.done) && - Objects.equals(this.response, challengeOperation.response) && - Objects.equals(this.error, challengeOperation.error); - } - - @Override - public int hashCode() { - return Objects.hash(name, metadata, done, response, error); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class ChallengeOperation {\n"); - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" done: ").append(toIndentedString(done)).append("\n"); - sb.append(" response: ").append(toIndentedString(response)).append("\n"); - sb.append(" error: ").append(toIndentedString(error)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } +public sealed interface ChallengeOperation extends Operation permits + PendingChallengeOperation, + CompletedChallengeOperation, + FailedChallengeOperation { + ChallengeOperationMetadata getMetadata(); } - diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedChallengeOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedChallengeOperation.java index bdf68e73..9871c33d 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedChallengeOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedChallengeOperation.java @@ -35,7 +35,8 @@ CompletedChallengeOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class CompletedChallengeOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class CompletedChallengeOperation implements ChallengeOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedCredentialOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedCredentialOperation.java index 7efab3a2..10cbc2db 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedCredentialOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedCredentialOperation.java @@ -35,7 +35,8 @@ CompletedCredentialOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class CompletedCredentialOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class CompletedCredentialOperation implements CredentialOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDelegationOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDelegationOperation.java index c9abe014..32487a92 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDelegationOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDelegationOperation.java @@ -35,7 +35,8 @@ CompletedDelegationOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class CompletedDelegationOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class CompletedDelegationOperation implements DelegationOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDelegatorOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDelegatorOperation.java index 643dc420..17b4047b 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDelegatorOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDelegatorOperation.java @@ -34,7 +34,8 @@ CompletedDelegatorOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class CompletedDelegatorOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class CompletedDelegatorOperation implements DelegatorOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDoneOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDoneOperation.java index 4d55536c..f79243e0 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDoneOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDoneOperation.java @@ -35,7 +35,8 @@ CompletedDoneOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class CompletedDoneOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class CompletedDoneOperation implements DoneOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedEndRoleOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedEndRoleOperation.java index a11a6af5..df2d55bf 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedEndRoleOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedEndRoleOperation.java @@ -35,7 +35,8 @@ CompletedEndRoleOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class CompletedEndRoleOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class CompletedEndRoleOperation implements EndRoleOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedExchangeOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedExchangeOperation.java index 691ab8d3..3bc31ed1 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedExchangeOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedExchangeOperation.java @@ -34,7 +34,8 @@ CompletedExchangeOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class CompletedExchangeOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class CompletedExchangeOperation implements ExchangeOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedGroupOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedGroupOperation.java index 8139a8b8..4d18394f 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedGroupOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedGroupOperation.java @@ -33,7 +33,8 @@ CompletedGroupOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class CompletedGroupOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class CompletedGroupOperation implements GroupOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedLocSchemeOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedLocSchemeOperation.java index d414e5fa..7402f6cf 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedLocSchemeOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedLocSchemeOperation.java @@ -34,7 +34,8 @@ CompletedLocSchemeOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class CompletedLocSchemeOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class CompletedLocSchemeOperation implements LocSchemeOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedOOBIOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedOOBIOperation.java index 51358ab0..18fdb3e5 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedOOBIOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedOOBIOperation.java @@ -35,7 +35,8 @@ CompletedOOBIOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class CompletedOOBIOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class CompletedOOBIOperation implements OOBIOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedQueryOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedQueryOperation.java index 72536380..ef1f6595 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedQueryOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedQueryOperation.java @@ -35,7 +35,8 @@ CompletedQueryOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class CompletedQueryOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class CompletedQueryOperation implements QueryOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedRegistryOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedRegistryOperation.java index 511a8b56..10b7beae 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedRegistryOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedRegistryOperation.java @@ -35,7 +35,8 @@ CompletedRegistryOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class CompletedRegistryOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class CompletedRegistryOperation implements RegistryOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedSubmitOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedSubmitOperation.java index a7c3a21c..26a8fd83 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedSubmitOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedSubmitOperation.java @@ -35,7 +35,8 @@ CompletedSubmitOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class CompletedSubmitOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class CompletedSubmitOperation implements SubmitOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedWitnessOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedWitnessOperation.java index 4ffc2c05..8fb9d8c8 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedWitnessOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedWitnessOperation.java @@ -35,7 +35,8 @@ CompletedWitnessOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class CompletedWitnessOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class CompletedWitnessOperation implements WitnessOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperation.java index b99c5ad5..36f338aa 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperation.java @@ -1,272 +1,9 @@ -/* - * KERIA Interactive Web Interface API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 1.0.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - package org.cardanofoundation.signify.generated.keria.model; -import java.util.Objects; -import java.util.Arrays; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.annotation.JsonValue; -import org.cardanofoundation.signify.generated.keria.model.CompletedCredentialOperation; -import org.cardanofoundation.signify.generated.keria.model.CredentialOperationMetadata; -import org.cardanofoundation.signify.generated.keria.model.CredentialOperationResponse; -import org.cardanofoundation.signify.generated.keria.model.FailedCredentialOperation; -import org.cardanofoundation.signify.generated.keria.model.OperationStatus; -import org.cardanofoundation.signify.generated.keria.model.PendingCredentialOperation; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonTypeName; - -/** - * CredentialOperation - */ -@JsonPropertyOrder({ - CredentialOperation.JSON_PROPERTY_NAME, - CredentialOperation.JSON_PROPERTY_METADATA, - CredentialOperation.JSON_PROPERTY_DONE, - CredentialOperation.JSON_PROPERTY_RESPONSE, - CredentialOperation.JSON_PROPERTY_ERROR -}) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class CredentialOperation { - public static final String JSON_PROPERTY_NAME = "name"; - @jakarta.annotation.Nonnull - private String name; - - public static final String JSON_PROPERTY_METADATA = "metadata"; - @jakarta.annotation.Nullable - private CredentialOperationMetadata metadata; - - /** - * Gets or Sets done - */ - public enum DoneEnum { - TRUE(Boolean.valueOf("true")); - - private Boolean value; - - DoneEnum(Boolean value) { - this.value = value; - } - - @JsonValue - public Boolean getValue() { - return value; - } - - @Override - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static DoneEnum fromValue(Boolean value) { - for (DoneEnum b : DoneEnum.values()) { - if (b.value.equals(value)) { - return b; - } - } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); - } - } - - public static final String JSON_PROPERTY_DONE = "done"; - @jakarta.annotation.Nonnull - private DoneEnum done; - - public static final String JSON_PROPERTY_RESPONSE = "response"; - @jakarta.annotation.Nonnull - private CredentialOperationResponse response; - - public static final String JSON_PROPERTY_ERROR = "error"; - @jakarta.annotation.Nonnull - private OperationStatus error; - - public CredentialOperation() { - } - - public CredentialOperation name(@jakarta.annotation.Nonnull String name) { - - this.name = name; - return this; - } - - /** - * Get name - * @return name - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getName() { - return name; - } - - - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setName(@jakarta.annotation.Nonnull String name) { - this.name = name; - } - - public CredentialOperation metadata(@jakarta.annotation.Nullable CredentialOperationMetadata metadata) { - - this.metadata = metadata; - return this; - } - - /** - * Get metadata - * @return metadata - */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - - public CredentialOperationMetadata getMetadata() { - return metadata; - } - - - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMetadata(@jakarta.annotation.Nullable CredentialOperationMetadata metadata) { - this.metadata = metadata; - } - - public CredentialOperation done(@jakarta.annotation.Nonnull DoneEnum done) { - - this.done = done; - return this; - } - - /** - * Get done - * @return done - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneEnum getDone() { - return done; - } - - - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDone(@jakarta.annotation.Nonnull DoneEnum done) { - this.done = done; - } - - public CredentialOperation response(@jakarta.annotation.Nonnull CredentialOperationResponse response) { - - this.response = response; - return this; - } - - /** - * Get response - * @return response - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public CredentialOperationResponse getResponse() { - return response; - } - - - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setResponse(@jakarta.annotation.Nonnull CredentialOperationResponse response) { - this.response = response; - } - - public CredentialOperation error(@jakarta.annotation.Nonnull OperationStatus error) { - - this.error = error; - return this; - } - - /** - * Get error - * @return error - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public OperationStatus getError() { - return error; - } - - - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setError(@jakarta.annotation.Nonnull OperationStatus error) { - this.error = error; - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - CredentialOperation credentialOperation = (CredentialOperation) o; - return Objects.equals(this.name, credentialOperation.name) && - Objects.equals(this.metadata, credentialOperation.metadata) && - Objects.equals(this.done, credentialOperation.done) && - Objects.equals(this.response, credentialOperation.response) && - Objects.equals(this.error, credentialOperation.error); - } - - @Override - public int hashCode() { - return Objects.hash(name, metadata, done, response, error); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class CredentialOperation {\n"); - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" done: ").append(toIndentedString(done)).append("\n"); - sb.append(" response: ").append(toIndentedString(response)).append("\n"); - sb.append(" error: ").append(toIndentedString(error)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } +public sealed interface CredentialOperation extends Operation permits + PendingCredentialOperation, + CompletedCredentialOperation, + FailedCredentialOperation { + CredentialOperationMetadata getMetadata(); } - diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegationOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegationOperation.java index da0687d3..c2da015b 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegationOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegationOperation.java @@ -1,272 +1,9 @@ -/* - * KERIA Interactive Web Interface API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 1.0.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - package org.cardanofoundation.signify.generated.keria.model; -import java.util.Objects; -import java.util.Arrays; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.annotation.JsonValue; -import org.cardanofoundation.signify.generated.keria.model.CompletedDelegationOperation; -import org.cardanofoundation.signify.generated.keria.model.CompletedDelegationOperationResponse; -import org.cardanofoundation.signify.generated.keria.model.DelegationMetadata; -import org.cardanofoundation.signify.generated.keria.model.FailedDelegationOperation; -import org.cardanofoundation.signify.generated.keria.model.OperationStatus; -import org.cardanofoundation.signify.generated.keria.model.PendingDelegationOperation; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonTypeName; - -/** - * DelegationOperation - */ -@JsonPropertyOrder({ - DelegationOperation.JSON_PROPERTY_NAME, - DelegationOperation.JSON_PROPERTY_METADATA, - DelegationOperation.JSON_PROPERTY_DONE, - DelegationOperation.JSON_PROPERTY_RESPONSE, - DelegationOperation.JSON_PROPERTY_ERROR -}) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class DelegationOperation { - public static final String JSON_PROPERTY_NAME = "name"; - @jakarta.annotation.Nonnull - private String name; - - public static final String JSON_PROPERTY_METADATA = "metadata"; - @jakarta.annotation.Nullable - private DelegationMetadata metadata; - - /** - * Gets or Sets done - */ - public enum DoneEnum { - TRUE(Boolean.valueOf("true")); - - private Boolean value; - - DoneEnum(Boolean value) { - this.value = value; - } - - @JsonValue - public Boolean getValue() { - return value; - } - - @Override - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static DoneEnum fromValue(Boolean value) { - for (DoneEnum b : DoneEnum.values()) { - if (b.value.equals(value)) { - return b; - } - } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); - } - } - - public static final String JSON_PROPERTY_DONE = "done"; - @jakarta.annotation.Nonnull - private DoneEnum done; - - public static final String JSON_PROPERTY_RESPONSE = "response"; - @jakarta.annotation.Nonnull - private CompletedDelegationOperationResponse response; - - public static final String JSON_PROPERTY_ERROR = "error"; - @jakarta.annotation.Nonnull - private OperationStatus error; - - public DelegationOperation() { - } - - public DelegationOperation name(@jakarta.annotation.Nonnull String name) { - - this.name = name; - return this; - } - - /** - * Get name - * @return name - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getName() { - return name; - } - - - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setName(@jakarta.annotation.Nonnull String name) { - this.name = name; - } - - public DelegationOperation metadata(@jakarta.annotation.Nullable DelegationMetadata metadata) { - - this.metadata = metadata; - return this; - } - - /** - * Get metadata - * @return metadata - */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - - public DelegationMetadata getMetadata() { - return metadata; - } - - - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMetadata(@jakarta.annotation.Nullable DelegationMetadata metadata) { - this.metadata = metadata; - } - - public DelegationOperation done(@jakarta.annotation.Nonnull DoneEnum done) { - - this.done = done; - return this; - } - - /** - * Get done - * @return done - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneEnum getDone() { - return done; - } - - - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDone(@jakarta.annotation.Nonnull DoneEnum done) { - this.done = done; - } - - public DelegationOperation response(@jakarta.annotation.Nonnull CompletedDelegationOperationResponse response) { - - this.response = response; - return this; - } - - /** - * Get response - * @return response - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public CompletedDelegationOperationResponse getResponse() { - return response; - } - - - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setResponse(@jakarta.annotation.Nonnull CompletedDelegationOperationResponse response) { - this.response = response; - } - - public DelegationOperation error(@jakarta.annotation.Nonnull OperationStatus error) { - - this.error = error; - return this; - } - - /** - * Get error - * @return error - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public OperationStatus getError() { - return error; - } - - - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setError(@jakarta.annotation.Nonnull OperationStatus error) { - this.error = error; - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - DelegationOperation delegationOperation = (DelegationOperation) o; - return Objects.equals(this.name, delegationOperation.name) && - Objects.equals(this.metadata, delegationOperation.metadata) && - Objects.equals(this.done, delegationOperation.done) && - Objects.equals(this.response, delegationOperation.response) && - Objects.equals(this.error, delegationOperation.error); - } - - @Override - public int hashCode() { - return Objects.hash(name, metadata, done, response, error); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class DelegationOperation {\n"); - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" done: ").append(toIndentedString(done)).append("\n"); - sb.append(" response: ").append(toIndentedString(response)).append("\n"); - sb.append(" error: ").append(toIndentedString(error)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } +public sealed interface DelegationOperation extends Operation permits + PendingDelegationOperation, + CompletedDelegationOperation, + FailedDelegationOperation { + DelegationMetadata getMetadata(); } - diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperation.java index e0ebb68f..c7fab284 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperation.java @@ -1,271 +1,9 @@ -/* - * KERIA Interactive Web Interface API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 1.0.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - package org.cardanofoundation.signify.generated.keria.model; -import java.util.Objects; -import java.util.Arrays; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.annotation.JsonValue; -import org.cardanofoundation.signify.generated.keria.model.CompletedDelegatorOperation; -import org.cardanofoundation.signify.generated.keria.model.DelegatorOperationMetadata; -import org.cardanofoundation.signify.generated.keria.model.FailedDelegatorOperation; -import org.cardanofoundation.signify.generated.keria.model.OperationStatus; -import org.cardanofoundation.signify.generated.keria.model.PendingDelegatorOperation; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonTypeName; - -/** - * DelegatorOperation - */ -@JsonPropertyOrder({ - DelegatorOperation.JSON_PROPERTY_NAME, - DelegatorOperation.JSON_PROPERTY_METADATA, - DelegatorOperation.JSON_PROPERTY_DONE, - DelegatorOperation.JSON_PROPERTY_RESPONSE, - DelegatorOperation.JSON_PROPERTY_ERROR -}) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class DelegatorOperation { - public static final String JSON_PROPERTY_NAME = "name"; - @jakarta.annotation.Nonnull - private String name; - - public static final String JSON_PROPERTY_METADATA = "metadata"; - @jakarta.annotation.Nullable - private DelegatorOperationMetadata metadata; - - /** - * Gets or Sets done - */ - public enum DoneEnum { - TRUE(Boolean.valueOf("true")); - - private Boolean value; - - DoneEnum(Boolean value) { - this.value = value; - } - - @JsonValue - public Boolean getValue() { - return value; - } - - @Override - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static DoneEnum fromValue(Boolean value) { - for (DoneEnum b : DoneEnum.values()) { - if (b.value.equals(value)) { - return b; - } - } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); - } - } - - public static final String JSON_PROPERTY_DONE = "done"; - @jakarta.annotation.Nonnull - private DoneEnum done; - - public static final String JSON_PROPERTY_RESPONSE = "response"; - @jakarta.annotation.Nonnull - private String response; - - public static final String JSON_PROPERTY_ERROR = "error"; - @jakarta.annotation.Nonnull - private OperationStatus error; - - public DelegatorOperation() { - } - - public DelegatorOperation name(@jakarta.annotation.Nonnull String name) { - - this.name = name; - return this; - } - - /** - * Get name - * @return name - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getName() { - return name; - } - - - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setName(@jakarta.annotation.Nonnull String name) { - this.name = name; - } - - public DelegatorOperation metadata(@jakarta.annotation.Nullable DelegatorOperationMetadata metadata) { - - this.metadata = metadata; - return this; - } - - /** - * Get metadata - * @return metadata - */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - - public DelegatorOperationMetadata getMetadata() { - return metadata; - } - - - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMetadata(@jakarta.annotation.Nullable DelegatorOperationMetadata metadata) { - this.metadata = metadata; - } - - public DelegatorOperation done(@jakarta.annotation.Nonnull DoneEnum done) { - - this.done = done; - return this; - } - - /** - * Get done - * @return done - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneEnum getDone() { - return done; - } - - - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDone(@jakarta.annotation.Nonnull DoneEnum done) { - this.done = done; - } - - public DelegatorOperation response(@jakarta.annotation.Nonnull String response) { - - this.response = response; - return this; - } - - /** - * Get response - * @return response - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getResponse() { - return response; - } - - - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setResponse(@jakarta.annotation.Nonnull String response) { - this.response = response; - } - - public DelegatorOperation error(@jakarta.annotation.Nonnull OperationStatus error) { - - this.error = error; - return this; - } - - /** - * Get error - * @return error - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public OperationStatus getError() { - return error; - } - - - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setError(@jakarta.annotation.Nonnull OperationStatus error) { - this.error = error; - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - DelegatorOperation delegatorOperation = (DelegatorOperation) o; - return Objects.equals(this.name, delegatorOperation.name) && - Objects.equals(this.metadata, delegatorOperation.metadata) && - Objects.equals(this.done, delegatorOperation.done) && - Objects.equals(this.response, delegatorOperation.response) && - Objects.equals(this.error, delegatorOperation.error); - } - - @Override - public int hashCode() { - return Objects.hash(name, metadata, done, response, error); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class DelegatorOperation {\n"); - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" done: ").append(toIndentedString(done)).append("\n"); - sb.append(" response: ").append(toIndentedString(response)).append("\n"); - sb.append(" error: ").append(toIndentedString(error)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } +public sealed interface DelegatorOperation extends Operation permits + PendingDelegatorOperation, + CompletedDelegatorOperation, + FailedDelegatorOperation { + DelegatorOperationMetadata getMetadata(); } - diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java index 9dad5e32..ceab975c 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java @@ -1,272 +1,9 @@ -/* - * KERIA Interactive Web Interface API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 1.0.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - package org.cardanofoundation.signify.generated.keria.model; -import java.util.Objects; -import java.util.Arrays; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.annotation.JsonValue; -import org.cardanofoundation.signify.generated.keria.model.CompletedDoneOperation; -import org.cardanofoundation.signify.generated.keria.model.DoneOperationMetadata; -import org.cardanofoundation.signify.generated.keria.model.DoneOperationMetadataResponse; -import org.cardanofoundation.signify.generated.keria.model.FailedDoneOperation; -import org.cardanofoundation.signify.generated.keria.model.OperationStatus; -import org.cardanofoundation.signify.generated.keria.model.PendingDoneOperation; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonTypeName; - -/** - * DoneOperation - */ -@JsonPropertyOrder({ - DoneOperation.JSON_PROPERTY_NAME, - DoneOperation.JSON_PROPERTY_METADATA, - DoneOperation.JSON_PROPERTY_DONE, - DoneOperation.JSON_PROPERTY_RESPONSE, - DoneOperation.JSON_PROPERTY_ERROR -}) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class DoneOperation { - public static final String JSON_PROPERTY_NAME = "name"; - @jakarta.annotation.Nonnull - private String name; - - public static final String JSON_PROPERTY_METADATA = "metadata"; - @jakarta.annotation.Nullable - private DoneOperationMetadata metadata; - - /** - * Gets or Sets done - */ - public enum DoneEnum { - TRUE(Boolean.valueOf("true")); - - private Boolean value; - - DoneEnum(Boolean value) { - this.value = value; - } - - @JsonValue - public Boolean getValue() { - return value; - } - - @Override - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static DoneEnum fromValue(Boolean value) { - for (DoneEnum b : DoneEnum.values()) { - if (b.value.equals(value)) { - return b; - } - } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); - } - } - - public static final String JSON_PROPERTY_DONE = "done"; - @jakarta.annotation.Nonnull - private DoneEnum done; - - public static final String JSON_PROPERTY_RESPONSE = "response"; - @jakarta.annotation.Nonnull - private DoneOperationMetadataResponse response; - - public static final String JSON_PROPERTY_ERROR = "error"; - @jakarta.annotation.Nonnull - private OperationStatus error; - - public DoneOperation() { - } - - public DoneOperation name(@jakarta.annotation.Nonnull String name) { - - this.name = name; - return this; - } - - /** - * Get name - * @return name - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getName() { - return name; - } - - - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setName(@jakarta.annotation.Nonnull String name) { - this.name = name; - } - - public DoneOperation metadata(@jakarta.annotation.Nullable DoneOperationMetadata metadata) { - - this.metadata = metadata; - return this; - } - - /** - * Get metadata - * @return metadata - */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - - public DoneOperationMetadata getMetadata() { - return metadata; - } - - - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMetadata(@jakarta.annotation.Nullable DoneOperationMetadata metadata) { - this.metadata = metadata; - } - - public DoneOperation done(@jakarta.annotation.Nonnull DoneEnum done) { - - this.done = done; - return this; - } - - /** - * Get done - * @return done - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneEnum getDone() { - return done; - } - - - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDone(@jakarta.annotation.Nonnull DoneEnum done) { - this.done = done; - } - - public DoneOperation response(@jakarta.annotation.Nonnull DoneOperationMetadataResponse response) { - - this.response = response; - return this; - } - - /** - * Get response - * @return response - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneOperationMetadataResponse getResponse() { - return response; - } - - - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setResponse(@jakarta.annotation.Nonnull DoneOperationMetadataResponse response) { - this.response = response; - } - - public DoneOperation error(@jakarta.annotation.Nonnull OperationStatus error) { - - this.error = error; - return this; - } - - /** - * Get error - * @return error - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public OperationStatus getError() { - return error; - } - - - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setError(@jakarta.annotation.Nonnull OperationStatus error) { - this.error = error; - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - DoneOperation doneOperation = (DoneOperation) o; - return Objects.equals(this.name, doneOperation.name) && - Objects.equals(this.metadata, doneOperation.metadata) && - Objects.equals(this.done, doneOperation.done) && - Objects.equals(this.response, doneOperation.response) && - Objects.equals(this.error, doneOperation.error); - } - - @Override - public int hashCode() { - return Objects.hash(name, metadata, done, response, error); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class DoneOperation {\n"); - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" done: ").append(toIndentedString(done)).append("\n"); - sb.append(" response: ").append(toIndentedString(response)).append("\n"); - sb.append(" error: ").append(toIndentedString(error)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } +public sealed interface DoneOperation extends Operation permits + PendingDoneOperation, + CompletedDoneOperation, + FailedDoneOperation { + DoneOperationMetadata getMetadata(); } - diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/EndRoleOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/EndRoleOperation.java index 29feaf1d..73599962 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/EndRoleOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/EndRoleOperation.java @@ -1,272 +1,9 @@ -/* - * KERIA Interactive Web Interface API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 1.0.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - package org.cardanofoundation.signify.generated.keria.model; -import java.util.Objects; -import java.util.Arrays; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.annotation.JsonValue; -import org.cardanofoundation.signify.generated.keria.model.CompletedEndRoleOperation; -import org.cardanofoundation.signify.generated.keria.model.CompletedEndRoleOperationResponse; -import org.cardanofoundation.signify.generated.keria.model.EndRoleMetadata; -import org.cardanofoundation.signify.generated.keria.model.FailedEndRoleOperation; -import org.cardanofoundation.signify.generated.keria.model.OperationStatus; -import org.cardanofoundation.signify.generated.keria.model.PendingEndRoleOperation; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonTypeName; - -/** - * EndRoleOperation - */ -@JsonPropertyOrder({ - EndRoleOperation.JSON_PROPERTY_NAME, - EndRoleOperation.JSON_PROPERTY_METADATA, - EndRoleOperation.JSON_PROPERTY_DONE, - EndRoleOperation.JSON_PROPERTY_RESPONSE, - EndRoleOperation.JSON_PROPERTY_ERROR -}) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class EndRoleOperation { - public static final String JSON_PROPERTY_NAME = "name"; - @jakarta.annotation.Nonnull - private String name; - - public static final String JSON_PROPERTY_METADATA = "metadata"; - @jakarta.annotation.Nullable - private EndRoleMetadata metadata; - - /** - * Gets or Sets done - */ - public enum DoneEnum { - TRUE(Boolean.valueOf("true")); - - private Boolean value; - - DoneEnum(Boolean value) { - this.value = value; - } - - @JsonValue - public Boolean getValue() { - return value; - } - - @Override - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static DoneEnum fromValue(Boolean value) { - for (DoneEnum b : DoneEnum.values()) { - if (b.value.equals(value)) { - return b; - } - } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); - } - } - - public static final String JSON_PROPERTY_DONE = "done"; - @jakarta.annotation.Nonnull - private DoneEnum done; - - public static final String JSON_PROPERTY_RESPONSE = "response"; - @jakarta.annotation.Nonnull - private CompletedEndRoleOperationResponse response; - - public static final String JSON_PROPERTY_ERROR = "error"; - @jakarta.annotation.Nonnull - private OperationStatus error; - - public EndRoleOperation() { - } - - public EndRoleOperation name(@jakarta.annotation.Nonnull String name) { - - this.name = name; - return this; - } - - /** - * Get name - * @return name - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getName() { - return name; - } - - - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setName(@jakarta.annotation.Nonnull String name) { - this.name = name; - } - - public EndRoleOperation metadata(@jakarta.annotation.Nullable EndRoleMetadata metadata) { - - this.metadata = metadata; - return this; - } - - /** - * Get metadata - * @return metadata - */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - - public EndRoleMetadata getMetadata() { - return metadata; - } - - - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMetadata(@jakarta.annotation.Nullable EndRoleMetadata metadata) { - this.metadata = metadata; - } - - public EndRoleOperation done(@jakarta.annotation.Nonnull DoneEnum done) { - - this.done = done; - return this; - } - - /** - * Get done - * @return done - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneEnum getDone() { - return done; - } - - - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDone(@jakarta.annotation.Nonnull DoneEnum done) { - this.done = done; - } - - public EndRoleOperation response(@jakarta.annotation.Nonnull CompletedEndRoleOperationResponse response) { - - this.response = response; - return this; - } - - /** - * Get response - * @return response - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public CompletedEndRoleOperationResponse getResponse() { - return response; - } - - - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setResponse(@jakarta.annotation.Nonnull CompletedEndRoleOperationResponse response) { - this.response = response; - } - - public EndRoleOperation error(@jakarta.annotation.Nonnull OperationStatus error) { - - this.error = error; - return this; - } - - /** - * Get error - * @return error - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public OperationStatus getError() { - return error; - } - - - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setError(@jakarta.annotation.Nonnull OperationStatus error) { - this.error = error; - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - EndRoleOperation endRoleOperation = (EndRoleOperation) o; - return Objects.equals(this.name, endRoleOperation.name) && - Objects.equals(this.metadata, endRoleOperation.metadata) && - Objects.equals(this.done, endRoleOperation.done) && - Objects.equals(this.response, endRoleOperation.response) && - Objects.equals(this.error, endRoleOperation.error); - } - - @Override - public int hashCode() { - return Objects.hash(name, metadata, done, response, error); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class EndRoleOperation {\n"); - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" done: ").append(toIndentedString(done)).append("\n"); - sb.append(" response: ").append(toIndentedString(response)).append("\n"); - sb.append(" error: ").append(toIndentedString(error)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } +public sealed interface EndRoleOperation extends Operation permits + PendingEndRoleOperation, + CompletedEndRoleOperation, + FailedEndRoleOperation { + EndRoleMetadata getMetadata(); } - diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/ExchangeOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/ExchangeOperation.java index 3ba6982b..558754c3 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/ExchangeOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/ExchangeOperation.java @@ -1,271 +1,9 @@ -/* - * KERIA Interactive Web Interface API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 1.0.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - package org.cardanofoundation.signify.generated.keria.model; -import java.util.Objects; -import java.util.Arrays; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.annotation.JsonValue; -import org.cardanofoundation.signify.generated.keria.model.CompletedExchangeOperation; -import org.cardanofoundation.signify.generated.keria.model.ExchangeOperationMetadata; -import org.cardanofoundation.signify.generated.keria.model.FailedExchangeOperation; -import org.cardanofoundation.signify.generated.keria.model.OperationStatus; -import org.cardanofoundation.signify.generated.keria.model.PendingExchangeOperation; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonTypeName; - -/** - * ExchangeOperation - */ -@JsonPropertyOrder({ - ExchangeOperation.JSON_PROPERTY_NAME, - ExchangeOperation.JSON_PROPERTY_METADATA, - ExchangeOperation.JSON_PROPERTY_DONE, - ExchangeOperation.JSON_PROPERTY_RESPONSE, - ExchangeOperation.JSON_PROPERTY_ERROR -}) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class ExchangeOperation { - public static final String JSON_PROPERTY_NAME = "name"; - @jakarta.annotation.Nonnull - private String name; - - public static final String JSON_PROPERTY_METADATA = "metadata"; - @jakarta.annotation.Nullable - private ExchangeOperationMetadata metadata; - - /** - * Gets or Sets done - */ - public enum DoneEnum { - TRUE(Boolean.valueOf("true")); - - private Boolean value; - - DoneEnum(Boolean value) { - this.value = value; - } - - @JsonValue - public Boolean getValue() { - return value; - } - - @Override - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static DoneEnum fromValue(Boolean value) { - for (DoneEnum b : DoneEnum.values()) { - if (b.value.equals(value)) { - return b; - } - } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); - } - } - - public static final String JSON_PROPERTY_DONE = "done"; - @jakarta.annotation.Nonnull - private DoneEnum done; - - public static final String JSON_PROPERTY_RESPONSE = "response"; - @jakarta.annotation.Nonnull - private ExchangeOperationMetadata response; - - public static final String JSON_PROPERTY_ERROR = "error"; - @jakarta.annotation.Nonnull - private OperationStatus error; - - public ExchangeOperation() { - } - - public ExchangeOperation name(@jakarta.annotation.Nonnull String name) { - - this.name = name; - return this; - } - - /** - * Get name - * @return name - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getName() { - return name; - } - - - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setName(@jakarta.annotation.Nonnull String name) { - this.name = name; - } - - public ExchangeOperation metadata(@jakarta.annotation.Nullable ExchangeOperationMetadata metadata) { - - this.metadata = metadata; - return this; - } - - /** - * Get metadata - * @return metadata - */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - - public ExchangeOperationMetadata getMetadata() { - return metadata; - } - - - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMetadata(@jakarta.annotation.Nullable ExchangeOperationMetadata metadata) { - this.metadata = metadata; - } - - public ExchangeOperation done(@jakarta.annotation.Nonnull DoneEnum done) { - - this.done = done; - return this; - } - - /** - * Get done - * @return done - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneEnum getDone() { - return done; - } - - - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDone(@jakarta.annotation.Nonnull DoneEnum done) { - this.done = done; - } - - public ExchangeOperation response(@jakarta.annotation.Nonnull ExchangeOperationMetadata response) { - - this.response = response; - return this; - } - - /** - * Get response - * @return response - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public ExchangeOperationMetadata getResponse() { - return response; - } - - - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setResponse(@jakarta.annotation.Nonnull ExchangeOperationMetadata response) { - this.response = response; - } - - public ExchangeOperation error(@jakarta.annotation.Nonnull OperationStatus error) { - - this.error = error; - return this; - } - - /** - * Get error - * @return error - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public OperationStatus getError() { - return error; - } - - - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setError(@jakarta.annotation.Nonnull OperationStatus error) { - this.error = error; - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ExchangeOperation exchangeOperation = (ExchangeOperation) o; - return Objects.equals(this.name, exchangeOperation.name) && - Objects.equals(this.metadata, exchangeOperation.metadata) && - Objects.equals(this.done, exchangeOperation.done) && - Objects.equals(this.response, exchangeOperation.response) && - Objects.equals(this.error, exchangeOperation.error); - } - - @Override - public int hashCode() { - return Objects.hash(name, metadata, done, response, error); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class ExchangeOperation {\n"); - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" done: ").append(toIndentedString(done)).append("\n"); - sb.append(" response: ").append(toIndentedString(response)).append("\n"); - sb.append(" error: ").append(toIndentedString(error)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } +public sealed interface ExchangeOperation extends Operation permits + PendingExchangeOperation, + CompletedExchangeOperation, + FailedExchangeOperation { + ExchangeOperationMetadata getMetadata(); } - diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedChallengeOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedChallengeOperation.java index ac00310f..2c40adcf 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedChallengeOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedChallengeOperation.java @@ -35,7 +35,8 @@ FailedChallengeOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class FailedChallengeOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class FailedChallengeOperation implements ChallengeOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedCredentialOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedCredentialOperation.java index 4ea34fe5..55eb55fe 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedCredentialOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedCredentialOperation.java @@ -35,7 +35,8 @@ FailedCredentialOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class FailedCredentialOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class FailedCredentialOperation implements CredentialOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedDelegationOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedDelegationOperation.java index f37fd95b..551c9d92 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedDelegationOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedDelegationOperation.java @@ -35,7 +35,8 @@ FailedDelegationOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class FailedDelegationOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class FailedDelegationOperation implements DelegationOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedDelegatorOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedDelegatorOperation.java index 80237e03..c1377c60 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedDelegatorOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedDelegatorOperation.java @@ -35,7 +35,8 @@ FailedDelegatorOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class FailedDelegatorOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class FailedDelegatorOperation implements DelegatorOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedDoneOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedDoneOperation.java index a22cd9fd..4647a5a3 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedDoneOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedDoneOperation.java @@ -35,7 +35,8 @@ FailedDoneOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class FailedDoneOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class FailedDoneOperation implements DoneOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedEndRoleOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedEndRoleOperation.java index ac78fc8a..0f1f93a8 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedEndRoleOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedEndRoleOperation.java @@ -35,7 +35,8 @@ FailedEndRoleOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class FailedEndRoleOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class FailedEndRoleOperation implements EndRoleOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedExchangeOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedExchangeOperation.java index b0b19485..35fd6947 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedExchangeOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedExchangeOperation.java @@ -35,7 +35,8 @@ FailedExchangeOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class FailedExchangeOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class FailedExchangeOperation implements ExchangeOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedGroupOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedGroupOperation.java index 9a164344..ab55b090 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedGroupOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedGroupOperation.java @@ -35,7 +35,8 @@ FailedGroupOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class FailedGroupOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class FailedGroupOperation implements GroupOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedLocSchemeOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedLocSchemeOperation.java index 51bc1a13..e7c0431f 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedLocSchemeOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedLocSchemeOperation.java @@ -35,7 +35,8 @@ FailedLocSchemeOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class FailedLocSchemeOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class FailedLocSchemeOperation implements LocSchemeOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedOOBIOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedOOBIOperation.java index d840cc93..2e2fc7b0 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedOOBIOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedOOBIOperation.java @@ -35,7 +35,8 @@ FailedOOBIOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class FailedOOBIOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class FailedOOBIOperation implements OOBIOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedQueryOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedQueryOperation.java index e72c2e7c..c8fb20b9 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedQueryOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedQueryOperation.java @@ -35,7 +35,8 @@ FailedQueryOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class FailedQueryOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class FailedQueryOperation implements QueryOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedRegistryOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedRegistryOperation.java index c3e9a65e..b6078050 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedRegistryOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedRegistryOperation.java @@ -35,7 +35,8 @@ FailedRegistryOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class FailedRegistryOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class FailedRegistryOperation implements RegistryOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedSubmitOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedSubmitOperation.java index b2af42ac..e94e2a5a 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedSubmitOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedSubmitOperation.java @@ -35,7 +35,8 @@ FailedSubmitOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class FailedSubmitOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class FailedSubmitOperation implements SubmitOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedWitnessOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedWitnessOperation.java index deb4a1f2..9282e0b4 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedWitnessOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/FailedWitnessOperation.java @@ -35,7 +35,8 @@ FailedWitnessOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class FailedWitnessOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class FailedWitnessOperation implements WitnessOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java index c26edf88..21b37bb2 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java @@ -1,239 +1,9 @@ -/* - * KERIA Interactive Web Interface API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 1.0.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - package org.cardanofoundation.signify.generated.keria.model; -import java.util.Objects; -import java.util.Arrays; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.annotation.JsonValue; -import org.cardanofoundation.signify.generated.keria.model.CompletedGroupOperation; -import org.cardanofoundation.signify.generated.keria.model.FailedGroupOperation; -import org.cardanofoundation.signify.generated.keria.model.GroupOperationMetadata; -import org.cardanofoundation.signify.generated.keria.model.OperationStatus; -import org.cardanofoundation.signify.generated.keria.model.PendingGroupOperation; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonTypeName; - -/** - * GroupOperation - */ -@JsonPropertyOrder({ - GroupOperation.JSON_PROPERTY_NAME, - GroupOperation.JSON_PROPERTY_METADATA, - GroupOperation.JSON_PROPERTY_DONE, - GroupOperation.JSON_PROPERTY_ERROR -}) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class GroupOperation { - public static final String JSON_PROPERTY_NAME = "name"; - @jakarta.annotation.Nonnull - private String name; - - public static final String JSON_PROPERTY_METADATA = "metadata"; - @jakarta.annotation.Nullable - private GroupOperationMetadata metadata; - - /** - * Gets or Sets done - */ - public enum DoneEnum { - TRUE(Boolean.valueOf("true")); - - private Boolean value; - - DoneEnum(Boolean value) { - this.value = value; - } - - @JsonValue - public Boolean getValue() { - return value; - } - - @Override - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static DoneEnum fromValue(Boolean value) { - for (DoneEnum b : DoneEnum.values()) { - if (b.value.equals(value)) { - return b; - } - } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); - } - } - - public static final String JSON_PROPERTY_DONE = "done"; - @jakarta.annotation.Nonnull - private DoneEnum done; - - public static final String JSON_PROPERTY_ERROR = "error"; - @jakarta.annotation.Nonnull - private OperationStatus error; - - public GroupOperation() { - } - - public GroupOperation name(@jakarta.annotation.Nonnull String name) { - - this.name = name; - return this; - } - - /** - * Get name - * @return name - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getName() { - return name; - } - - - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setName(@jakarta.annotation.Nonnull String name) { - this.name = name; - } - - public GroupOperation metadata(@jakarta.annotation.Nullable GroupOperationMetadata metadata) { - - this.metadata = metadata; - return this; - } - - /** - * Get metadata - * @return metadata - */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - - public GroupOperationMetadata getMetadata() { - return metadata; - } - - - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMetadata(@jakarta.annotation.Nullable GroupOperationMetadata metadata) { - this.metadata = metadata; - } - - public GroupOperation done(@jakarta.annotation.Nonnull DoneEnum done) { - - this.done = done; - return this; - } - - /** - * Get done - * @return done - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneEnum getDone() { - return done; - } - - - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDone(@jakarta.annotation.Nonnull DoneEnum done) { - this.done = done; - } - - public GroupOperation error(@jakarta.annotation.Nonnull OperationStatus error) { - - this.error = error; - return this; - } - - /** - * Get error - * @return error - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public OperationStatus getError() { - return error; - } - - - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setError(@jakarta.annotation.Nonnull OperationStatus error) { - this.error = error; - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - GroupOperation groupOperation = (GroupOperation) o; - return Objects.equals(this.name, groupOperation.name) && - Objects.equals(this.metadata, groupOperation.metadata) && - Objects.equals(this.done, groupOperation.done) && - Objects.equals(this.error, groupOperation.error); - } - - @Override - public int hashCode() { - return Objects.hash(name, metadata, done, error); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class GroupOperation {\n"); - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" done: ").append(toIndentedString(done)).append("\n"); - sb.append(" error: ").append(toIndentedString(error)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } +public sealed interface GroupOperation extends Operation permits + PendingGroupOperation, + CompletedGroupOperation, + FailedGroupOperation { + GroupOperationMetadata getMetadata(); } - diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/LocSchemeOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/LocSchemeOperation.java index 478778df..f01d67d1 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/LocSchemeOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/LocSchemeOperation.java @@ -1,271 +1,9 @@ -/* - * KERIA Interactive Web Interface API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 1.0.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - package org.cardanofoundation.signify.generated.keria.model; -import java.util.Objects; -import java.util.Arrays; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.annotation.JsonValue; -import org.cardanofoundation.signify.generated.keria.model.CompletedLocSchemeOperation; -import org.cardanofoundation.signify.generated.keria.model.FailedLocSchemeOperation; -import org.cardanofoundation.signify.generated.keria.model.LocSchemeMetadata; -import org.cardanofoundation.signify.generated.keria.model.OperationStatus; -import org.cardanofoundation.signify.generated.keria.model.PendingLocSchemeOperation; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonTypeName; - -/** - * LocSchemeOperation - */ -@JsonPropertyOrder({ - LocSchemeOperation.JSON_PROPERTY_NAME, - LocSchemeOperation.JSON_PROPERTY_METADATA, - LocSchemeOperation.JSON_PROPERTY_DONE, - LocSchemeOperation.JSON_PROPERTY_RESPONSE, - LocSchemeOperation.JSON_PROPERTY_ERROR -}) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class LocSchemeOperation { - public static final String JSON_PROPERTY_NAME = "name"; - @jakarta.annotation.Nonnull - private String name; - - public static final String JSON_PROPERTY_METADATA = "metadata"; - @jakarta.annotation.Nullable - private LocSchemeMetadata metadata; - - /** - * Gets or Sets done - */ - public enum DoneEnum { - TRUE(Boolean.valueOf("true")); - - private Boolean value; - - DoneEnum(Boolean value) { - this.value = value; - } - - @JsonValue - public Boolean getValue() { - return value; - } - - @Override - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static DoneEnum fromValue(Boolean value) { - for (DoneEnum b : DoneEnum.values()) { - if (b.value.equals(value)) { - return b; - } - } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); - } - } - - public static final String JSON_PROPERTY_DONE = "done"; - @jakarta.annotation.Nonnull - private DoneEnum done; - - public static final String JSON_PROPERTY_RESPONSE = "response"; - @jakarta.annotation.Nonnull - private LocSchemeMetadata response; - - public static final String JSON_PROPERTY_ERROR = "error"; - @jakarta.annotation.Nonnull - private OperationStatus error; - - public LocSchemeOperation() { - } - - public LocSchemeOperation name(@jakarta.annotation.Nonnull String name) { - - this.name = name; - return this; - } - - /** - * Get name - * @return name - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getName() { - return name; - } - - - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setName(@jakarta.annotation.Nonnull String name) { - this.name = name; - } - - public LocSchemeOperation metadata(@jakarta.annotation.Nullable LocSchemeMetadata metadata) { - - this.metadata = metadata; - return this; - } - - /** - * Get metadata - * @return metadata - */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - - public LocSchemeMetadata getMetadata() { - return metadata; - } - - - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMetadata(@jakarta.annotation.Nullable LocSchemeMetadata metadata) { - this.metadata = metadata; - } - - public LocSchemeOperation done(@jakarta.annotation.Nonnull DoneEnum done) { - - this.done = done; - return this; - } - - /** - * Get done - * @return done - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneEnum getDone() { - return done; - } - - - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDone(@jakarta.annotation.Nonnull DoneEnum done) { - this.done = done; - } - - public LocSchemeOperation response(@jakarta.annotation.Nonnull LocSchemeMetadata response) { - - this.response = response; - return this; - } - - /** - * Get response - * @return response - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public LocSchemeMetadata getResponse() { - return response; - } - - - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setResponse(@jakarta.annotation.Nonnull LocSchemeMetadata response) { - this.response = response; - } - - public LocSchemeOperation error(@jakarta.annotation.Nonnull OperationStatus error) { - - this.error = error; - return this; - } - - /** - * Get error - * @return error - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public OperationStatus getError() { - return error; - } - - - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setError(@jakarta.annotation.Nonnull OperationStatus error) { - this.error = error; - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - LocSchemeOperation locSchemeOperation = (LocSchemeOperation) o; - return Objects.equals(this.name, locSchemeOperation.name) && - Objects.equals(this.metadata, locSchemeOperation.metadata) && - Objects.equals(this.done, locSchemeOperation.done) && - Objects.equals(this.response, locSchemeOperation.response) && - Objects.equals(this.error, locSchemeOperation.error); - } - - @Override - public int hashCode() { - return Objects.hash(name, metadata, done, response, error); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class LocSchemeOperation {\n"); - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" done: ").append(toIndentedString(done)).append("\n"); - sb.append(" response: ").append(toIndentedString(response)).append("\n"); - sb.append(" error: ").append(toIndentedString(error)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } +public sealed interface LocSchemeOperation extends Operation permits + PendingLocSchemeOperation, + CompletedLocSchemeOperation, + FailedLocSchemeOperation { + LocSchemeMetadata getMetadata(); } - diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/OOBIOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/OOBIOperation.java index 2896343d..08dbdc47 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/OOBIOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/OOBIOperation.java @@ -1,272 +1,9 @@ -/* - * KERIA Interactive Web Interface API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 1.0.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - package org.cardanofoundation.signify.generated.keria.model; -import java.util.Objects; -import java.util.Arrays; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.annotation.JsonValue; -import org.cardanofoundation.signify.generated.keria.model.CompletedOOBIOperation; -import org.cardanofoundation.signify.generated.keria.model.FailedOOBIOperation; -import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; -import org.cardanofoundation.signify.generated.keria.model.OOBIMetadata; -import org.cardanofoundation.signify.generated.keria.model.OperationStatus; -import org.cardanofoundation.signify.generated.keria.model.PendingOOBIOperation; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonTypeName; - -/** - * OOBIOperation - */ -@JsonPropertyOrder({ - OOBIOperation.JSON_PROPERTY_NAME, - OOBIOperation.JSON_PROPERTY_METADATA, - OOBIOperation.JSON_PROPERTY_DONE, - OOBIOperation.JSON_PROPERTY_RESPONSE, - OOBIOperation.JSON_PROPERTY_ERROR -}) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class OOBIOperation { - public static final String JSON_PROPERTY_NAME = "name"; - @jakarta.annotation.Nonnull - private String name; - - public static final String JSON_PROPERTY_METADATA = "metadata"; - @jakarta.annotation.Nullable - private OOBIMetadata metadata; - - /** - * Gets or Sets done - */ - public enum DoneEnum { - TRUE(Boolean.valueOf("true")); - - private Boolean value; - - DoneEnum(Boolean value) { - this.value = value; - } - - @JsonValue - public Boolean getValue() { - return value; - } - - @Override - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static DoneEnum fromValue(Boolean value) { - for (DoneEnum b : DoneEnum.values()) { - if (b.value.equals(value)) { - return b; - } - } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); - } - } - - public static final String JSON_PROPERTY_DONE = "done"; - @jakarta.annotation.Nonnull - private DoneEnum done; - - public static final String JSON_PROPERTY_RESPONSE = "response"; - @jakarta.annotation.Nonnull - private KeyStateRecord response; - - public static final String JSON_PROPERTY_ERROR = "error"; - @jakarta.annotation.Nonnull - private OperationStatus error; - - public OOBIOperation() { - } - - public OOBIOperation name(@jakarta.annotation.Nonnull String name) { - - this.name = name; - return this; - } - - /** - * Get name - * @return name - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getName() { - return name; - } - - - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setName(@jakarta.annotation.Nonnull String name) { - this.name = name; - } - - public OOBIOperation metadata(@jakarta.annotation.Nullable OOBIMetadata metadata) { - - this.metadata = metadata; - return this; - } - - /** - * Get metadata - * @return metadata - */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - - public OOBIMetadata getMetadata() { - return metadata; - } - - - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMetadata(@jakarta.annotation.Nullable OOBIMetadata metadata) { - this.metadata = metadata; - } - - public OOBIOperation done(@jakarta.annotation.Nonnull DoneEnum done) { - - this.done = done; - return this; - } - - /** - * Get done - * @return done - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneEnum getDone() { - return done; - } - - - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDone(@jakarta.annotation.Nonnull DoneEnum done) { - this.done = done; - } - - public OOBIOperation response(@jakarta.annotation.Nonnull KeyStateRecord response) { - - this.response = response; - return this; - } - - /** - * Get response - * @return response - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public KeyStateRecord getResponse() { - return response; - } - - - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setResponse(@jakarta.annotation.Nonnull KeyStateRecord response) { - this.response = response; - } - - public OOBIOperation error(@jakarta.annotation.Nonnull OperationStatus error) { - - this.error = error; - return this; - } - - /** - * Get error - * @return error - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public OperationStatus getError() { - return error; - } - - - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setError(@jakarta.annotation.Nonnull OperationStatus error) { - this.error = error; - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - OOBIOperation ooBIOperation = (OOBIOperation) o; - return Objects.equals(this.name, ooBIOperation.name) && - Objects.equals(this.metadata, ooBIOperation.metadata) && - Objects.equals(this.done, ooBIOperation.done) && - Objects.equals(this.response, ooBIOperation.response) && - Objects.equals(this.error, ooBIOperation.error); - } - - @Override - public int hashCode() { - return Objects.hash(name, metadata, done, response, error); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class OOBIOperation {\n"); - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" done: ").append(toIndentedString(done)).append("\n"); - sb.append(" response: ").append(toIndentedString(response)).append("\n"); - sb.append(" error: ").append(toIndentedString(error)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } +public sealed interface OOBIOperation extends Operation permits + PendingOOBIOperation, + CompletedOOBIOperation, + FailedOOBIOperation { + OOBIMetadata getMetadata(); } - diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java index f073f24f..fd4996f6 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java @@ -1,282 +1,24 @@ -/* - * KERIA Interactive Web Interface API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 1.0.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - package org.cardanofoundation.signify.generated.keria.model; -import java.util.Objects; -import java.util.Arrays; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.annotation.JsonValue; -import org.cardanofoundation.signify.generated.keria.model.ChallengeOperation; -import org.cardanofoundation.signify.generated.keria.model.CredentialOperation; -import org.cardanofoundation.signify.generated.keria.model.DelegationOperation; -import org.cardanofoundation.signify.generated.keria.model.DelegatorOperation; -import org.cardanofoundation.signify.generated.keria.model.DelegatorOperationMetadata; -import org.cardanofoundation.signify.generated.keria.model.DoneOperation; -import org.cardanofoundation.signify.generated.keria.model.EndRoleOperation; -import org.cardanofoundation.signify.generated.keria.model.ExchangeOperation; -import org.cardanofoundation.signify.generated.keria.model.GroupOperation; -import org.cardanofoundation.signify.generated.keria.model.LocSchemeOperation; -import org.cardanofoundation.signify.generated.keria.model.OOBIOperation; -import org.cardanofoundation.signify.generated.keria.model.OperationStatus; -import org.cardanofoundation.signify.generated.keria.model.QueryOperation; -import org.cardanofoundation.signify.generated.keria.model.RegistryOperation; -import org.cardanofoundation.signify.generated.keria.model.SubmitOperation; -import org.cardanofoundation.signify.generated.keria.model.WitnessOperation; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonTypeName; - -/** - * Operation - */ -@JsonPropertyOrder({ - Operation.JSON_PROPERTY_NAME, - Operation.JSON_PROPERTY_METADATA, - Operation.JSON_PROPERTY_DONE, - Operation.JSON_PROPERTY_RESPONSE, - Operation.JSON_PROPERTY_ERROR -}) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class Operation { - public static final String JSON_PROPERTY_NAME = "name"; - @jakarta.annotation.Nonnull - private String name; - - public static final String JSON_PROPERTY_METADATA = "metadata"; - @jakarta.annotation.Nullable - private DelegatorOperationMetadata metadata; - - /** - * Gets or Sets done - */ - public enum DoneEnum { - TRUE(Boolean.valueOf("true")); - - private Boolean value; - - DoneEnum(Boolean value) { - this.value = value; - } - - @JsonValue - public Boolean getValue() { - return value; - } - - @Override - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static DoneEnum fromValue(Boolean value) { - for (DoneEnum b : DoneEnum.values()) { - if (b.value.equals(value)) { - return b; - } - } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); - } - } - - public static final String JSON_PROPERTY_DONE = "done"; - @jakarta.annotation.Nonnull - private DoneEnum done; - - public static final String JSON_PROPERTY_RESPONSE = "response"; - @jakarta.annotation.Nonnull - private String response; - - public static final String JSON_PROPERTY_ERROR = "error"; - @jakarta.annotation.Nonnull - private OperationStatus error; - - public Operation() { - } - - public Operation name(@jakarta.annotation.Nonnull String name) { - - this.name = name; - return this; - } - - /** - * Get name - * @return name - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getName() { - return name; - } - - - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setName(@jakarta.annotation.Nonnull String name) { - this.name = name; - } - - public Operation metadata(@jakarta.annotation.Nullable DelegatorOperationMetadata metadata) { - - this.metadata = metadata; - return this; - } - - /** - * Get metadata - * @return metadata - */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - - public DelegatorOperationMetadata getMetadata() { - return metadata; - } - - - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMetadata(@jakarta.annotation.Nullable DelegatorOperationMetadata metadata) { - this.metadata = metadata; - } - - public Operation done(@jakarta.annotation.Nonnull DoneEnum done) { - - this.done = done; - return this; - } - - /** - * Get done - * @return done - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneEnum getDone() { - return done; - } - - - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDone(@jakarta.annotation.Nonnull DoneEnum done) { - this.done = done; - } - - public Operation response(@jakarta.annotation.Nonnull String response) { - - this.response = response; - return this; - } - - /** - * Get response - * @return response - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getResponse() { - return response; - } - - - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setResponse(@jakarta.annotation.Nonnull String response) { - this.response = response; - } - - public Operation error(@jakarta.annotation.Nonnull OperationStatus error) { - - this.error = error; - return this; - } - - /** - * Get error - * @return error - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public OperationStatus getError() { - return error; - } - - - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setError(@jakarta.annotation.Nonnull OperationStatus error) { - this.error = error; - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - Operation operation = (Operation) o; - return Objects.equals(this.name, operation.name) && - Objects.equals(this.metadata, operation.metadata) && - Objects.equals(this.done, operation.done) && - Objects.equals(this.response, operation.response) && - Objects.equals(this.error, operation.error); - } - - @Override - public int hashCode() { - return Objects.hash(name, metadata, done, response, error); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class Operation {\n"); - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" done: ").append(toIndentedString(done)).append("\n"); - sb.append(" response: ").append(toIndentedString(response)).append("\n"); - sb.append(" error: ").append(toIndentedString(error)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } - +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import org.cardanofoundation.signify.app.coring.OperationDeserializer; + +@JsonDeserialize(using = OperationDeserializer.class) +public sealed interface Operation permits + ChallengeOperation, + CredentialOperation, + DelegationOperation, + DelegatorOperation, + DoneOperation, + EndRoleOperation, + ExchangeOperation, + GroupOperation, + LocSchemeOperation, + OOBIOperation, + QueryOperation, + RegistryOperation, + SubmitOperation, + WitnessOperation { + + String getName(); } - diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingChallengeOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingChallengeOperation.java index c355e069..70ea2429 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingChallengeOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingChallengeOperation.java @@ -33,7 +33,8 @@ PendingChallengeOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class PendingChallengeOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class PendingChallengeOperation implements ChallengeOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingCredentialOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingCredentialOperation.java index 37f31315..0d718887 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingCredentialOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingCredentialOperation.java @@ -33,7 +33,8 @@ PendingCredentialOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class PendingCredentialOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class PendingCredentialOperation implements CredentialOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDelegationOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDelegationOperation.java index 56f54cf0..717c0460 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDelegationOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDelegationOperation.java @@ -33,7 +33,8 @@ PendingDelegationOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class PendingDelegationOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class PendingDelegationOperation implements DelegationOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDelegatorOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDelegatorOperation.java index 394e283e..acb16603 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDelegatorOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDelegatorOperation.java @@ -33,7 +33,8 @@ PendingDelegatorOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class PendingDelegatorOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class PendingDelegatorOperation implements DelegatorOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDoneOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDoneOperation.java index d351781e..41505b4b 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDoneOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDoneOperation.java @@ -33,7 +33,8 @@ PendingDoneOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class PendingDoneOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class PendingDoneOperation implements DoneOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingEndRoleOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingEndRoleOperation.java index 77058437..8691cd9a 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingEndRoleOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingEndRoleOperation.java @@ -33,7 +33,8 @@ PendingEndRoleOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class PendingEndRoleOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class PendingEndRoleOperation implements EndRoleOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingExchangeOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingExchangeOperation.java index a27b259a..cbc5cddf 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingExchangeOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingExchangeOperation.java @@ -33,7 +33,8 @@ PendingExchangeOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class PendingExchangeOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class PendingExchangeOperation implements ExchangeOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingGroupOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingGroupOperation.java index a2b43284..6a2801e4 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingGroupOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingGroupOperation.java @@ -33,7 +33,8 @@ PendingGroupOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class PendingGroupOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class PendingGroupOperation implements GroupOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingLocSchemeOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingLocSchemeOperation.java index ff7d1006..4910bba8 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingLocSchemeOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingLocSchemeOperation.java @@ -33,7 +33,8 @@ PendingLocSchemeOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class PendingLocSchemeOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class PendingLocSchemeOperation implements LocSchemeOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingOOBIOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingOOBIOperation.java index fd9a0918..a4851ce2 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingOOBIOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingOOBIOperation.java @@ -33,7 +33,8 @@ PendingOOBIOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class PendingOOBIOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class PendingOOBIOperation implements OOBIOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingQueryOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingQueryOperation.java index f3ccaa7e..93b1bfed 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingQueryOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingQueryOperation.java @@ -33,7 +33,8 @@ PendingQueryOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class PendingQueryOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class PendingQueryOperation implements QueryOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingRegistryOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingRegistryOperation.java index b360bc20..2a2a103c 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingRegistryOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingRegistryOperation.java @@ -33,7 +33,8 @@ PendingRegistryOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class PendingRegistryOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class PendingRegistryOperation implements RegistryOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingSubmitOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingSubmitOperation.java index d7e5dc11..c07ab082 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingSubmitOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingSubmitOperation.java @@ -33,7 +33,8 @@ PendingSubmitOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class PendingSubmitOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class PendingSubmitOperation implements SubmitOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingWitnessOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingWitnessOperation.java index 2eb73a1a..78e237b1 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingWitnessOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingWitnessOperation.java @@ -33,7 +33,8 @@ PendingWitnessOperation.JSON_PROPERTY_DONE }) @jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class PendingWitnessOperation { +@com.fasterxml.jackson.databind.annotation.JsonDeserialize +public final class PendingWitnessOperation implements WitnessOperation { public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private String name; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/QueryOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/QueryOperation.java index f022f4e7..91ce616c 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/QueryOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/QueryOperation.java @@ -1,272 +1,9 @@ -/* - * KERIA Interactive Web Interface API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 1.0.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - package org.cardanofoundation.signify.generated.keria.model; -import java.util.Objects; -import java.util.Arrays; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.annotation.JsonValue; -import org.cardanofoundation.signify.generated.keria.model.CompletedQueryOperation; -import org.cardanofoundation.signify.generated.keria.model.FailedQueryOperation; -import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; -import org.cardanofoundation.signify.generated.keria.model.OperationStatus; -import org.cardanofoundation.signify.generated.keria.model.PendingQueryOperation; -import org.cardanofoundation.signify.generated.keria.model.QueryMetadata; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonTypeName; - -/** - * QueryOperation - */ -@JsonPropertyOrder({ - QueryOperation.JSON_PROPERTY_NAME, - QueryOperation.JSON_PROPERTY_METADATA, - QueryOperation.JSON_PROPERTY_DONE, - QueryOperation.JSON_PROPERTY_RESPONSE, - QueryOperation.JSON_PROPERTY_ERROR -}) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class QueryOperation { - public static final String JSON_PROPERTY_NAME = "name"; - @jakarta.annotation.Nonnull - private String name; - - public static final String JSON_PROPERTY_METADATA = "metadata"; - @jakarta.annotation.Nullable - private QueryMetadata metadata; - - /** - * Gets or Sets done - */ - public enum DoneEnum { - TRUE(Boolean.valueOf("true")); - - private Boolean value; - - DoneEnum(Boolean value) { - this.value = value; - } - - @JsonValue - public Boolean getValue() { - return value; - } - - @Override - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static DoneEnum fromValue(Boolean value) { - for (DoneEnum b : DoneEnum.values()) { - if (b.value.equals(value)) { - return b; - } - } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); - } - } - - public static final String JSON_PROPERTY_DONE = "done"; - @jakarta.annotation.Nonnull - private DoneEnum done; - - public static final String JSON_PROPERTY_RESPONSE = "response"; - @jakarta.annotation.Nonnull - private KeyStateRecord response; - - public static final String JSON_PROPERTY_ERROR = "error"; - @jakarta.annotation.Nonnull - private OperationStatus error; - - public QueryOperation() { - } - - public QueryOperation name(@jakarta.annotation.Nonnull String name) { - - this.name = name; - return this; - } - - /** - * Get name - * @return name - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getName() { - return name; - } - - - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setName(@jakarta.annotation.Nonnull String name) { - this.name = name; - } - - public QueryOperation metadata(@jakarta.annotation.Nullable QueryMetadata metadata) { - - this.metadata = metadata; - return this; - } - - /** - * Get metadata - * @return metadata - */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - - public QueryMetadata getMetadata() { - return metadata; - } - - - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMetadata(@jakarta.annotation.Nullable QueryMetadata metadata) { - this.metadata = metadata; - } - - public QueryOperation done(@jakarta.annotation.Nonnull DoneEnum done) { - - this.done = done; - return this; - } - - /** - * Get done - * @return done - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneEnum getDone() { - return done; - } - - - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDone(@jakarta.annotation.Nonnull DoneEnum done) { - this.done = done; - } - - public QueryOperation response(@jakarta.annotation.Nonnull KeyStateRecord response) { - - this.response = response; - return this; - } - - /** - * Get response - * @return response - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public KeyStateRecord getResponse() { - return response; - } - - - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setResponse(@jakarta.annotation.Nonnull KeyStateRecord response) { - this.response = response; - } - - public QueryOperation error(@jakarta.annotation.Nonnull OperationStatus error) { - - this.error = error; - return this; - } - - /** - * Get error - * @return error - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public OperationStatus getError() { - return error; - } - - - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setError(@jakarta.annotation.Nonnull OperationStatus error) { - this.error = error; - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - QueryOperation queryOperation = (QueryOperation) o; - return Objects.equals(this.name, queryOperation.name) && - Objects.equals(this.metadata, queryOperation.metadata) && - Objects.equals(this.done, queryOperation.done) && - Objects.equals(this.response, queryOperation.response) && - Objects.equals(this.error, queryOperation.error); - } - - @Override - public int hashCode() { - return Objects.hash(name, metadata, done, response, error); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class QueryOperation {\n"); - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" done: ").append(toIndentedString(done)).append("\n"); - sb.append(" response: ").append(toIndentedString(response)).append("\n"); - sb.append(" error: ").append(toIndentedString(error)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } +public sealed interface QueryOperation extends Operation permits + PendingQueryOperation, + CompletedQueryOperation, + FailedQueryOperation { + QueryMetadata getMetadata(); } - diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperation.java index 5fc37a12..8c8bce12 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperation.java @@ -1,272 +1,9 @@ -/* - * KERIA Interactive Web Interface API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 1.0.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - package org.cardanofoundation.signify.generated.keria.model; -import java.util.Objects; -import java.util.Arrays; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.annotation.JsonValue; -import org.cardanofoundation.signify.generated.keria.model.CompletedRegistryOperation; -import org.cardanofoundation.signify.generated.keria.model.FailedRegistryOperation; -import org.cardanofoundation.signify.generated.keria.model.OperationStatus; -import org.cardanofoundation.signify.generated.keria.model.PendingRegistryOperation; -import org.cardanofoundation.signify.generated.keria.model.RegistryOperationMetadata; -import org.cardanofoundation.signify.generated.keria.model.RegistryOperationResponse; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonTypeName; - -/** - * RegistryOperation - */ -@JsonPropertyOrder({ - RegistryOperation.JSON_PROPERTY_NAME, - RegistryOperation.JSON_PROPERTY_METADATA, - RegistryOperation.JSON_PROPERTY_DONE, - RegistryOperation.JSON_PROPERTY_RESPONSE, - RegistryOperation.JSON_PROPERTY_ERROR -}) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class RegistryOperation { - public static final String JSON_PROPERTY_NAME = "name"; - @jakarta.annotation.Nonnull - private String name; - - public static final String JSON_PROPERTY_METADATA = "metadata"; - @jakarta.annotation.Nullable - private RegistryOperationMetadata metadata; - - /** - * Gets or Sets done - */ - public enum DoneEnum { - TRUE(Boolean.valueOf("true")); - - private Boolean value; - - DoneEnum(Boolean value) { - this.value = value; - } - - @JsonValue - public Boolean getValue() { - return value; - } - - @Override - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static DoneEnum fromValue(Boolean value) { - for (DoneEnum b : DoneEnum.values()) { - if (b.value.equals(value)) { - return b; - } - } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); - } - } - - public static final String JSON_PROPERTY_DONE = "done"; - @jakarta.annotation.Nonnull - private DoneEnum done; - - public static final String JSON_PROPERTY_RESPONSE = "response"; - @jakarta.annotation.Nonnull - private RegistryOperationResponse response; - - public static final String JSON_PROPERTY_ERROR = "error"; - @jakarta.annotation.Nonnull - private OperationStatus error; - - public RegistryOperation() { - } - - public RegistryOperation name(@jakarta.annotation.Nonnull String name) { - - this.name = name; - return this; - } - - /** - * Get name - * @return name - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getName() { - return name; - } - - - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setName(@jakarta.annotation.Nonnull String name) { - this.name = name; - } - - public RegistryOperation metadata(@jakarta.annotation.Nullable RegistryOperationMetadata metadata) { - - this.metadata = metadata; - return this; - } - - /** - * Get metadata - * @return metadata - */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - - public RegistryOperationMetadata getMetadata() { - return metadata; - } - - - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMetadata(@jakarta.annotation.Nullable RegistryOperationMetadata metadata) { - this.metadata = metadata; - } - - public RegistryOperation done(@jakarta.annotation.Nonnull DoneEnum done) { - - this.done = done; - return this; - } - - /** - * Get done - * @return done - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneEnum getDone() { - return done; - } - - - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDone(@jakarta.annotation.Nonnull DoneEnum done) { - this.done = done; - } - - public RegistryOperation response(@jakarta.annotation.Nonnull RegistryOperationResponse response) { - - this.response = response; - return this; - } - - /** - * Get response - * @return response - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public RegistryOperationResponse getResponse() { - return response; - } - - - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setResponse(@jakarta.annotation.Nonnull RegistryOperationResponse response) { - this.response = response; - } - - public RegistryOperation error(@jakarta.annotation.Nonnull OperationStatus error) { - - this.error = error; - return this; - } - - /** - * Get error - * @return error - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public OperationStatus getError() { - return error; - } - - - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setError(@jakarta.annotation.Nonnull OperationStatus error) { - this.error = error; - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - RegistryOperation registryOperation = (RegistryOperation) o; - return Objects.equals(this.name, registryOperation.name) && - Objects.equals(this.metadata, registryOperation.metadata) && - Objects.equals(this.done, registryOperation.done) && - Objects.equals(this.response, registryOperation.response) && - Objects.equals(this.error, registryOperation.error); - } - - @Override - public int hashCode() { - return Objects.hash(name, metadata, done, response, error); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class RegistryOperation {\n"); - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" done: ").append(toIndentedString(done)).append("\n"); - sb.append(" response: ").append(toIndentedString(response)).append("\n"); - sb.append(" error: ").append(toIndentedString(error)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } +public sealed interface RegistryOperation extends Operation permits + PendingRegistryOperation, + CompletedRegistryOperation, + FailedRegistryOperation { + RegistryOperationMetadata getMetadata(); } - diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/SubmitOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/SubmitOperation.java index 966e94d0..0cb303d2 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/SubmitOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/SubmitOperation.java @@ -1,272 +1,9 @@ -/* - * KERIA Interactive Web Interface API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 1.0.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - package org.cardanofoundation.signify.generated.keria.model; -import java.util.Objects; -import java.util.Arrays; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.annotation.JsonValue; -import org.cardanofoundation.signify.generated.keria.model.CompletedSubmitOperation; -import org.cardanofoundation.signify.generated.keria.model.FailedSubmitOperation; -import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; -import org.cardanofoundation.signify.generated.keria.model.OperationStatus; -import org.cardanofoundation.signify.generated.keria.model.PendingSubmitOperation; -import org.cardanofoundation.signify.generated.keria.model.SubmitOperationMetadata; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonTypeName; - -/** - * SubmitOperation - */ -@JsonPropertyOrder({ - SubmitOperation.JSON_PROPERTY_NAME, - SubmitOperation.JSON_PROPERTY_METADATA, - SubmitOperation.JSON_PROPERTY_DONE, - SubmitOperation.JSON_PROPERTY_RESPONSE, - SubmitOperation.JSON_PROPERTY_ERROR -}) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class SubmitOperation { - public static final String JSON_PROPERTY_NAME = "name"; - @jakarta.annotation.Nonnull - private String name; - - public static final String JSON_PROPERTY_METADATA = "metadata"; - @jakarta.annotation.Nullable - private SubmitOperationMetadata metadata; - - /** - * Gets or Sets done - */ - public enum DoneEnum { - TRUE(Boolean.valueOf("true")); - - private Boolean value; - - DoneEnum(Boolean value) { - this.value = value; - } - - @JsonValue - public Boolean getValue() { - return value; - } - - @Override - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static DoneEnum fromValue(Boolean value) { - for (DoneEnum b : DoneEnum.values()) { - if (b.value.equals(value)) { - return b; - } - } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); - } - } - - public static final String JSON_PROPERTY_DONE = "done"; - @jakarta.annotation.Nonnull - private DoneEnum done; - - public static final String JSON_PROPERTY_RESPONSE = "response"; - @jakarta.annotation.Nonnull - private KeyStateRecord response; - - public static final String JSON_PROPERTY_ERROR = "error"; - @jakarta.annotation.Nonnull - private OperationStatus error; - - public SubmitOperation() { - } - - public SubmitOperation name(@jakarta.annotation.Nonnull String name) { - - this.name = name; - return this; - } - - /** - * Get name - * @return name - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getName() { - return name; - } - - - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setName(@jakarta.annotation.Nonnull String name) { - this.name = name; - } - - public SubmitOperation metadata(@jakarta.annotation.Nullable SubmitOperationMetadata metadata) { - - this.metadata = metadata; - return this; - } - - /** - * Get metadata - * @return metadata - */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - - public SubmitOperationMetadata getMetadata() { - return metadata; - } - - - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMetadata(@jakarta.annotation.Nullable SubmitOperationMetadata metadata) { - this.metadata = metadata; - } - - public SubmitOperation done(@jakarta.annotation.Nonnull DoneEnum done) { - - this.done = done; - return this; - } - - /** - * Get done - * @return done - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneEnum getDone() { - return done; - } - - - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDone(@jakarta.annotation.Nonnull DoneEnum done) { - this.done = done; - } - - public SubmitOperation response(@jakarta.annotation.Nonnull KeyStateRecord response) { - - this.response = response; - return this; - } - - /** - * Get response - * @return response - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public KeyStateRecord getResponse() { - return response; - } - - - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setResponse(@jakarta.annotation.Nonnull KeyStateRecord response) { - this.response = response; - } - - public SubmitOperation error(@jakarta.annotation.Nonnull OperationStatus error) { - - this.error = error; - return this; - } - - /** - * Get error - * @return error - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public OperationStatus getError() { - return error; - } - - - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setError(@jakarta.annotation.Nonnull OperationStatus error) { - this.error = error; - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - SubmitOperation submitOperation = (SubmitOperation) o; - return Objects.equals(this.name, submitOperation.name) && - Objects.equals(this.metadata, submitOperation.metadata) && - Objects.equals(this.done, submitOperation.done) && - Objects.equals(this.response, submitOperation.response) && - Objects.equals(this.error, submitOperation.error); - } - - @Override - public int hashCode() { - return Objects.hash(name, metadata, done, response, error); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class SubmitOperation {\n"); - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" done: ").append(toIndentedString(done)).append("\n"); - sb.append(" response: ").append(toIndentedString(response)).append("\n"); - sb.append(" error: ").append(toIndentedString(error)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } +public sealed interface SubmitOperation extends Operation permits + PendingSubmitOperation, + CompletedSubmitOperation, + FailedSubmitOperation { + SubmitOperationMetadata getMetadata(); } - diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java index 4e9f9d91..8126a56d 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java @@ -1,272 +1,9 @@ -/* - * KERIA Interactive Web Interface API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 1.0.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - package org.cardanofoundation.signify.generated.keria.model; -import java.util.Objects; -import java.util.Arrays; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.annotation.JsonValue; -import org.cardanofoundation.signify.generated.keria.model.CompletedWitnessOperation; -import org.cardanofoundation.signify.generated.keria.model.CompletedWitnessOperationResponse; -import org.cardanofoundation.signify.generated.keria.model.FailedWitnessOperation; -import org.cardanofoundation.signify.generated.keria.model.OperationStatus; -import org.cardanofoundation.signify.generated.keria.model.PendingWitnessOperation; -import org.cardanofoundation.signify.generated.keria.model.WitnessMetadata; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonTypeName; - -/** - * WitnessOperation - */ -@JsonPropertyOrder({ - WitnessOperation.JSON_PROPERTY_NAME, - WitnessOperation.JSON_PROPERTY_METADATA, - WitnessOperation.JSON_PROPERTY_DONE, - WitnessOperation.JSON_PROPERTY_RESPONSE, - WitnessOperation.JSON_PROPERTY_ERROR -}) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class WitnessOperation { - public static final String JSON_PROPERTY_NAME = "name"; - @jakarta.annotation.Nonnull - private String name; - - public static final String JSON_PROPERTY_METADATA = "metadata"; - @jakarta.annotation.Nullable - private WitnessMetadata metadata; - - /** - * Gets or Sets done - */ - public enum DoneEnum { - TRUE(Boolean.valueOf("true")); - - private Boolean value; - - DoneEnum(Boolean value) { - this.value = value; - } - - @JsonValue - public Boolean getValue() { - return value; - } - - @Override - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static DoneEnum fromValue(Boolean value) { - for (DoneEnum b : DoneEnum.values()) { - if (b.value.equals(value)) { - return b; - } - } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); - } - } - - public static final String JSON_PROPERTY_DONE = "done"; - @jakarta.annotation.Nonnull - private DoneEnum done; - - public static final String JSON_PROPERTY_RESPONSE = "response"; - @jakarta.annotation.Nonnull - private CompletedWitnessOperationResponse response; - - public static final String JSON_PROPERTY_ERROR = "error"; - @jakarta.annotation.Nonnull - private OperationStatus error; - - public WitnessOperation() { - } - - public WitnessOperation name(@jakarta.annotation.Nonnull String name) { - - this.name = name; - return this; - } - - /** - * Get name - * @return name - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getName() { - return name; - } - - - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setName(@jakarta.annotation.Nonnull String name) { - this.name = name; - } - - public WitnessOperation metadata(@jakarta.annotation.Nullable WitnessMetadata metadata) { - - this.metadata = metadata; - return this; - } - - /** - * Get metadata - * @return metadata - */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - - public WitnessMetadata getMetadata() { - return metadata; - } - - - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMetadata(@jakarta.annotation.Nullable WitnessMetadata metadata) { - this.metadata = metadata; - } - - public WitnessOperation done(@jakarta.annotation.Nonnull DoneEnum done) { - - this.done = done; - return this; - } - - /** - * Get done - * @return done - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneEnum getDone() { - return done; - } - - - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDone(@jakarta.annotation.Nonnull DoneEnum done) { - this.done = done; - } - - public WitnessOperation response(@jakarta.annotation.Nonnull CompletedWitnessOperationResponse response) { - - this.response = response; - return this; - } - - /** - * Get response - * @return response - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public CompletedWitnessOperationResponse getResponse() { - return response; - } - - - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setResponse(@jakarta.annotation.Nonnull CompletedWitnessOperationResponse response) { - this.response = response; - } - - public WitnessOperation error(@jakarta.annotation.Nonnull OperationStatus error) { - - this.error = error; - return this; - } - - /** - * Get error - * @return error - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public OperationStatus getError() { - return error; - } - - - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setError(@jakarta.annotation.Nonnull OperationStatus error) { - this.error = error; - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - WitnessOperation witnessOperation = (WitnessOperation) o; - return Objects.equals(this.name, witnessOperation.name) && - Objects.equals(this.metadata, witnessOperation.metadata) && - Objects.equals(this.done, witnessOperation.done) && - Objects.equals(this.response, witnessOperation.response) && - Objects.equals(this.error, witnessOperation.error); - } - - @Override - public int hashCode() { - return Objects.hash(name, metadata, done, response, error); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class WitnessOperation {\n"); - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" done: ").append(toIndentedString(done)).append("\n"); - sb.append(" response: ").append(toIndentedString(response)).append("\n"); - sb.append(" error: ").append(toIndentedString(error)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } +public sealed interface WitnessOperation extends Operation permits + PendingWitnessOperation, + CompletedWitnessOperation, + FailedWitnessOperation { + WitnessMetadata getMetadata(); } - diff --git a/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java b/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java index b93804bc..ea1623ee 100644 --- a/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java +++ b/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java @@ -1,6 +1,5 @@ package org.cardanofoundation.signify.app; -import org.cardanofoundation.signify.app.coring.Operation; import org.cardanofoundation.signify.app.coring.Operations; import org.cardanofoundation.signify.app.coring.deps.OperationsDeps; import org.cardanofoundation.signify.cesr.exceptions.LibsodiumException; @@ -37,8 +36,7 @@ void setUp() { @Test @DisplayName("should get operation by name") void canGetOperationByName() throws IOException, InterruptedException, LibsodiumException { - String operationName = UUID.randomUUID().toString(); - String responseBody = "{\"name\":\"" + operationName + "\"}"; + String responseBody = "{\"name\":\"witness.test1\", \"done\": false}"; HttpResponse mockResponse = Mockito.mock(HttpResponse.class); Mockito.when(mockResponse.body()).thenReturn(responseBody); @@ -57,7 +55,7 @@ void canGetOperationByName() throws IOException, InterruptedException, Libsodium @DisplayName("Can list operations") void canListOperations() throws IOException, InterruptedException, LibsodiumException { HttpResponse mockResponse = Mockito.mock(HttpResponse.class); - Mockito.when(mockResponse.body()).thenReturn("[{}]"); + Mockito.when(mockResponse.body()).thenReturn("[{\"name\":\"witness.test1\", \"done\": false}]"); Mockito.when(mockResponse.statusCode()).thenReturn(200); when(client.fetch(anyString(), anyString(), isNull())) .thenReturn(mockResponse); @@ -73,7 +71,7 @@ void canListOperations() throws IOException, InterruptedException, LibsodiumExce @DisplayName("Can list operations by type") void canListOperationsByType() throws IOException, InterruptedException, LibsodiumException { HttpResponse mockResponse = Mockito.mock(HttpResponse.class); - Mockito.when(mockResponse.body()).thenReturn(Utils.jsonStringify(Collections.singletonList(buildOperation(true, true)))); + Mockito.when(mockResponse.body()).thenReturn("[{\"name\":\"witness.test123\", \"done\": true, \"response\": {}}]"); Mockito.when(mockResponse.statusCode()).thenReturn(200); when(client.fetch(anyString(), anyString(), isNull())) .thenReturn(mockResponse); @@ -85,7 +83,7 @@ void canListOperationsByType() throws IOException, InterruptedException, Libsodi assertEquals("GET", methodCaptor.getValue()); assertEquals(1, opsResponse.size()); - assertEquals("response", opsResponse.getFirst().getResponse()); + assertEquals("witness.test123", opsResponse.getFirst().getName()); } @Test @@ -105,19 +103,10 @@ void canDeleteOperationByName() throws IOException, InterruptedException, Libsod } @Test - @DisplayName("Does not wait for operation that is already done") + @DisplayName("Does not poll when operation is already done") void doesNotWaitForOperationThatIsAlreadyDone() throws IOException, InterruptedException, LibsodiumException { - Operation operation = buildOperation(true, true); - - var result = operations.wait(operation); - verify(client, never()).fetch(anyString(), anyString(), isNull(), isNull()); - assertEquals(operation, result); - } - - @Test - @DisplayName("Returns when operation is done after first call") - void returnsWhenOperationIsDoneAfterFirstCall() throws IOException, InterruptedException, LibsodiumException { - Operation operation = buildOperation(true, true); + Map operation = buildOperationMap(true, true); + String operationName = (String) operation.get("name"); HttpResponse mockResponse = Mockito.mock(HttpResponse.class); Mockito.when(mockResponse.body()).thenReturn(Utils.jsonStringify(operation)); @@ -125,67 +114,98 @@ void returnsWhenOperationIsDoneAfterFirstCall() throws IOException, InterruptedE when(client.fetch(anyString(), anyString(), isNull())) .thenReturn(mockResponse); - operation.setDone(false); - operations.wait(operation); + operations.wait(operationName, Map.class); + // 1 fetch: initial check finds done=true, returns immediately verify(client, times(1)).fetch(anyString(), anyString(), isNull()); } @Test - @DisplayName("Returns when operation is done after second call") - void returnsWhenOperationIsDoneAfterSecondCall() throws IOException, InterruptedException, LibsodiumException { - Operation operation1 = buildOperation(false, false); - Operation operation2 = buildOperation(true, true); + @DisplayName("Returns when operation is done after first poll") + void returnsWhenOperationIsDoneAfterFirstPoll() throws IOException, InterruptedException, LibsodiumException { + Map pendingOp = buildOperationMap(false, true); + Map doneOp = buildOperationMap(true, true); + doneOp.put("name", pendingOp.get("name")); + String operationName = (String) pendingOp.get("name"); + + HttpResponse pendingResponse = Mockito.mock(HttpResponse.class); + Mockito.when(pendingResponse.body()).thenReturn(Utils.jsonStringify(pendingOp)); + Mockito.when(pendingResponse.statusCode()).thenReturn(200); + + HttpResponse doneResponse = Mockito.mock(HttpResponse.class); + Mockito.when(doneResponse.body()).thenReturn(Utils.jsonStringify(doneOp)); + Mockito.when(doneResponse.statusCode()).thenReturn(200); + + when(client.fetch(anyString(), anyString(), isNull())) + .thenReturn(pendingResponse) + .thenReturn(doneResponse); + + operations.wait(operationName, Map.class); + // 1 initial fetch + 1 poll + verify(client, times(2)).fetch(anyString(), anyString(), isNull()); + } + + @Test + @DisplayName("Returns when operation is done after second poll") + void returnsWhenOperationIsDoneAfterSecondPoll() throws IOException, InterruptedException, LibsodiumException { + Map pendingOp = buildOperationMap(false, true); + Map doneOp = buildOperationMap(true, true); + doneOp.put("name", pendingOp.get("name")); + String operationName = (String) pendingOp.get("name"); - HttpResponse mockResponse1 = Mockito.mock(HttpResponse.class); - Mockito.when(mockResponse1.body()).thenReturn(Utils.jsonStringify(operation1)); - Mockito.when(mockResponse1.statusCode()).thenReturn(200); + HttpResponse pendingResponse = Mockito.mock(HttpResponse.class); + Mockito.when(pendingResponse.body()).thenReturn(Utils.jsonStringify(pendingOp)); + Mockito.when(pendingResponse.statusCode()).thenReturn(200); - HttpResponse mockResponse2 = Mockito.mock(HttpResponse.class); - Mockito.when(mockResponse2.body()).thenReturn(Utils.jsonStringify(operation2)); - Mockito.when(mockResponse2.statusCode()).thenReturn(200); + HttpResponse doneResponse = Mockito.mock(HttpResponse.class); + Mockito.when(doneResponse.body()).thenReturn(Utils.jsonStringify(doneOp)); + Mockito.when(doneResponse.statusCode()).thenReturn(200); when(client.fetch(anyString(), anyString(), isNull())) - .thenReturn(mockResponse1) - .thenReturn(mockResponse2); + .thenReturn(pendingResponse) + .thenReturn(pendingResponse) + .thenReturn(doneResponse); Operations.WaitOptions options = Operations.WaitOptions.builder() .maxSleep(10) .build(); - operations.wait(operation1, options); + operations.wait(operationName, Map.class, options); + // 1 initial + 2 polls verify(client, times(3)).fetch(anyString(), anyString(), isNull()); } @Test @DisplayName("Returns when child operation is also done") void returnsWhenChildOperationIsAlsoDone() throws IOException, InterruptedException, LibsodiumException { - HttpResponse mockResponse1 = Mockito.mock(HttpResponse.class); - Mockito.when(mockResponse1.body()).thenReturn(Utils.jsonStringify(buildOperation(false, false))); - Mockito.when(mockResponse1.statusCode()).thenReturn(200); + HttpResponse response1 = Mockito.mock(HttpResponse.class); + Mockito.when(response1.body()).thenReturn(Utils.jsonStringify(buildOperationMap(false, false))); + Mockito.when(response1.statusCode()).thenReturn(200); - HttpResponse mockResponse2 = Mockito.mock(HttpResponse.class); - Mockito.when(mockResponse2.body()).thenReturn(Utils.jsonStringify(buildOperation(false, true))); - Mockito.when(mockResponse2.statusCode()).thenReturn(200); + HttpResponse response2 = Mockito.mock(HttpResponse.class); + Mockito.when(response2.body()).thenReturn(Utils.jsonStringify(buildOperationMap(false, true))); + Mockito.when(response2.statusCode()).thenReturn(200); - HttpResponse mockResponse3 = Mockito.mock(HttpResponse.class); - Mockito.when(mockResponse3.body()).thenReturn(Utils.jsonStringify(buildOperation(true, true))); - Mockito.when(mockResponse3.statusCode()).thenReturn(200); + HttpResponse response3 = Mockito.mock(HttpResponse.class); + Mockito.when(response3.body()).thenReturn(Utils.jsonStringify(buildOperationMap(true, true))); + Mockito.when(response3.statusCode()).thenReturn(200); when(client.fetch(anyString(), anyString(), isNull())) - .thenReturn(mockResponse1) - .thenReturn(mockResponse2) - .thenReturn(mockResponse3); + .thenReturn(response1) // main: initial fetch - not done, depends not done + .thenReturn(response2) // depends: initial fetch - not done, its depends done + .thenReturn(response3) // depends: poll - done + .thenReturn(response3); // main: poll - done Operations.WaitOptions options = Operations.WaitOptions.builder() .maxSleep(10) .build(); - operations.wait(buildOperation(false, false), options); + operations.wait("witness.main", Map.class, options); verify(client, times(4)).fetch(anyString(), anyString(), isNull()); } @Test @DisplayName("Throw if aborting operation") void throwIfAbortingOperation() throws IOException, InterruptedException, LibsodiumException { - Operation operation = buildOperation(false, false); + Map operation = buildOperationMap(false, true); + String operationName = (String) operation.get("name"); HttpResponse mockResponse = Mockito.mock(HttpResponse.class); Mockito.when(mockResponse.body()).thenReturn(Utils.jsonStringify(operation)); @@ -199,31 +219,27 @@ void throwIfAbortingOperation() throws IOException, InterruptedException, Libsod .abortSignal(Operations.AbortSignal.builder().timeout(5000L).build()) .build(); - Exception exception = assertThrows(InterruptedException.class, () -> operations.wait(operation, options)); + Exception exception = assertThrows(InterruptedException.class, + () -> operations.wait(operationName, Map.class, options)); assertEquals("Operation aborted: Timeout", exception.getMessage()); } + Map buildOperationMap(boolean done, boolean dependsDone) { + Map depends = new LinkedHashMap<>(); + depends.put("name", UUID.randomUUID().toString()); + depends.put("response", "depend"); + depends.put("done", dependsDone); - Operation buildOperation(boolean done, boolean dependsDone) { - Operation operation = Operation.builder() - .name(UUID.randomUUID().toString()) - .response("response") - .done(done) - .build(); - - Operation depends = Operation.builder() - .name(UUID.randomUUID().toString()) - .response("depend") - .done(dependsDone) - .build(); - - Operation.Metadata metadata = Operation.Metadata.builder() - .depends(depends) - .properties(Map.of("key", "value")) - .build(); - operation.setMetadata(metadata); - return operation; - } + Map metadata = new LinkedHashMap<>(); + metadata.put("depends", depends); + metadata.put("key", "value"); + Map operation = new LinkedHashMap<>(); + operation.put("name", UUID.randomUUID().toString()); + operation.put("response", "response"); + operation.put("done", done); + operation.put("metadata", metadata); + return operation; + } } \ No newline at end of file diff --git a/src/test/java/org/cardanofoundation/signify/e2e/BaseIntegrationTest.java b/src/test/java/org/cardanofoundation/signify/e2e/BaseIntegrationTest.java index 34178f20..bc3a5715 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/BaseIntegrationTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/BaseIntegrationTest.java @@ -6,7 +6,6 @@ import lombok.Setter; import org.cardanofoundation.signify.app.aiding.CreateIdentifierArgs; import org.cardanofoundation.signify.app.clienting.SignifyClient; -import org.cardanofoundation.signify.app.coring.Operation; import org.cardanofoundation.signify.e2e.utils.TestUtils; import java.util.ArrayList; @@ -14,6 +13,8 @@ import java.util.concurrent.CompletableFuture; import org.cardanofoundation.signify.generated.keria.model.HabState; import org.cardanofoundation.signify.generated.keria.model.OOBI; +import org.cardanofoundation.signify.generated.keria.model.Operation; +import org.cardanofoundation.signify.generated.keria.model.QueryOperation; import static org.cardanofoundation.signify.e2e.utils.TestUtils.unchecked; @@ -44,8 +45,8 @@ public static List getOobisAsync(GetOobisArgs... getOobisArgs) { return getOobisFutures.stream().map(CompletableFuture::join).toList(); } - public static List getKeyStateQuerAsync(GetKeyStateQueryArgs... getKeyStateQueryArgs) { - List> getKeyStatesFutures = new ArrayList<>(); + public static List getKeyStateQuerAsync(GetKeyStateQueryArgs... getKeyStateQueryArgs) { + List> getKeyStatesFutures = new ArrayList<>(); for (GetKeyStateQueryArgs getKeyStateQueryArg : getKeyStateQueryArgs) { getKeyStatesFutures.add(getKeyStateFuture(getKeyStateQueryArg.signifyClient, getKeyStateQueryArg.pre, getKeyStateQueryArg.sn)); } @@ -116,7 +117,7 @@ static CompletableFuture getOobisFuture(SignifyClient client, String name, )); } - static CompletableFuture getKeyStateFuture(SignifyClient client, String pre, String sn) { + static CompletableFuture getKeyStateFuture(SignifyClient client, String pre, String sn) { return CompletableFuture.supplyAsync(unchecked(() -> client.keyStates().query(pre, sn) )); @@ -129,7 +130,7 @@ static CompletableFuture resolveOobisFuture(SignifyClient signifyClient, S })); } - static CompletableFuture waitOperationFuture(SignifyClient client, Object op) { + static CompletableFuture waitOperationFuture(SignifyClient client, Operation op) { return CompletableFuture.supplyAsync(unchecked(() -> TestUtils.waitOperation(client, op) )); @@ -198,7 +199,7 @@ public static class GetKeyStateQueryArgs { @AllArgsConstructor public static class WaitOperationArgs { private SignifyClient signifyClient; - private Object op; + private Operation op; } @Getter diff --git a/src/test/java/org/cardanofoundation/signify/e2e/ChallengesTest.java b/src/test/java/org/cardanofoundation/signify/e2e/ChallengesTest.java index 728822c2..f866d2d2 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/ChallengesTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/ChallengesTest.java @@ -5,12 +5,7 @@ import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.app.coring.Coring; -import org.cardanofoundation.signify.app.coring.Operation; -import org.cardanofoundation.signify.cesr.Serder; -import org.cardanofoundation.signify.generated.keria.model.Challenge; -import org.cardanofoundation.signify.generated.keria.model.Contact; -import org.cardanofoundation.signify.generated.keria.model.OOBI; -import org.cardanofoundation.signify.generated.keria.model.Tier; +import org.cardanofoundation.signify.generated.keria.model.*; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,7 +21,7 @@ public class ChallengesTest { private final String url = "http://127.0.0.1:3901"; private final String bootUrl = "http://127.0.0.1:3903"; private static SignifyClient client1, client2; - private HashMap opResponse, opResponse1, opResponse2; + private String aid1Prefix, aid2Prefix; @Test void ChallengeTest() throws Exception { @@ -68,15 +63,17 @@ void ChallengeTest() throws Exception { "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX" )); EventResult icpResult1 = client1.identifiers().create("alice", kargs1); - Operation op1 = Operation.fromObject(waitOperation(client1, icpResult1.op())); - opResponse1 = (HashMap) op1.getResponse(); + Operation op1 = waitOperation(client1, icpResult1.op()); + if (op1 instanceof CompletedWitnessOperation completed) { + aid1Prefix = completed.getResponse().getI(); + } EventResult rpyResult1 = client1.identifiers().addEndRole( "alice", "agent", client1.getAgent().getPre(), null); waitOperation(client1, rpyResult1.op()); - System.out.println("Alice's AID: " + opResponse1.get("i")); + System.out.println("Alice's AID: " + aid1Prefix); CreateIdentifierArgs kargs2 = new CreateIdentifierArgs(); kargs2.setToad(3); @@ -86,8 +83,10 @@ void ChallengeTest() throws Exception { "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX" )); EventResult icpResult2 = client2.identifiers().create("bob", kargs2); - Operation op2 = Operation.fromObject(waitOperation(client2, icpResult2.op())); - opResponse2 = (HashMap) op2.getResponse(); + Operation op2 = waitOperation(client2, icpResult2.op()); + if (op2 instanceof CompletedWitnessOperation completed) { + aid2Prefix = completed.getResponse().getI(); + } EventResult rpyResult2 = client2.identifiers().addEndRole( "bob", @@ -114,17 +113,18 @@ void ChallengeTest() throws Exception { assertEquals(0, bobContact.getChallenges().size()); // Bob responds to Alice's challenge - client2.challenges().respond("bob", (String) opResponse1.get("i"), challenge1_small.getWords()); + client2.challenges().respond("bob", aid1Prefix, challenge1_small.getWords()); System.out.println("Bob responded to Alice's challenge with signed words"); // Alice verifies Bob's response - Operation verifyResult = client1.challenges().verify((String) opResponse2.get("i"), challenge1_small.getWords()); - Operation op = Operation.fromObject(waitOperation(client1, verifyResult)); + ChallengeOperation verifyResult = client1.challenges().verify(aid2Prefix, challenge1_small.getWords()); + ChallengeOperation verifyOp = waitOperation(client1, verifyResult, ChallengeOperation.class); System.out.println("Alice verified challenge response"); - opResponse = (HashMap) op.getResponse(); - Serder exn = new Serder((Map) opResponse.get("exn")); - client1.challenges().responded((String) opResponse2.get("i"), (String) exn.getKed().get("d")); + if (verifyOp instanceof CompletedChallengeOperation completed) { + ChallengeOperationResponseExn exn = completed.getResponse().getExn(); + client1.challenges().responded(aid2Prefix, exn.getD()); + } System.out.println("Alice marked challenge response as accepted"); // Check Bob's challenge in contacts diff --git a/src/test/java/org/cardanofoundation/signify/e2e/CredentialsTest.java b/src/test/java/org/cardanofoundation/signify/e2e/CredentialsTest.java index efd3cb4c..77c2a52e 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/CredentialsTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/CredentialsTest.java @@ -265,7 +265,7 @@ public void single_signature_credentials() throws Exception { Exchanging.ExchangeMessageResult result = issuerClient.ipex().grant(gArgs); List holderAidPrefix = Collections.singletonList(holderAid.prefix); - Object op = issuerClient.ipex().submitGrant(issuerAid.name, result.exn(), result.sigs(), result.atc(), holderAidPrefix); + ExchangeOperation op = issuerClient.ipex().submitGrant(issuerAid.name, result.exn(), result.sigs(), result.atc(), holderAidPrefix); waitOperation(issuerClient, op); } catch (IOException | InterruptedException | DigestException | LibsodiumException e) { throw new RuntimeException(e); @@ -300,7 +300,7 @@ public void single_signature_credentials() throws Exception { iargs.setDatetime(createTimestamp()); Exchanging.ExchangeMessageResult result = holderClient.ipex().admit(iargs); - Object op = holderClient.ipex().submitAdmit( + ExchangeOperation op = holderClient.ipex().submitAdmit( holderAid.name, result.exn(), result.sigs(), result.atc(), Collections.singletonList(issuerAid.prefix) ); waitOperation(holderClient, op); @@ -343,7 +343,7 @@ public void single_signature_credentials() throws Exception { try { Exchanging.ExchangeMessageResult result = verifierClient.ipex().apply(args); - Object op = verifierClient.ipex().submitApply( + ExchangeOperation op = verifierClient.ipex().submitApply( verifierAid.name, result.exn(), result.sigs(), Collections.singletonList(holderAid.prefix) ); waitOperation(verifierClient, op); @@ -395,7 +395,7 @@ public void single_signature_credentials() throws Exception { offerArgs.setDatetime(createTimestamp()); Exchanging.ExchangeMessageResult result = holderClient.ipex().offer(offerArgs); - Object op = holderClient.ipex().submitOffer(holderAid.name, result.exn(), result.sigs(), result.atc(), Collections.singletonList(verifierAid.prefix)); + ExchangeOperation op = holderClient.ipex().submitOffer(holderAid.name, result.exn(), result.sigs(), result.atc(), Collections.singletonList(verifierAid.prefix)); waitOperation(holderClient, op); } catch (Exception e) { throw new RuntimeException(e); @@ -432,7 +432,7 @@ public void single_signature_credentials() throws Exception { agreeArgs.setDatetime(createTimestamp()); Exchanging.ExchangeMessageResult result = verifierClient.ipex().agree(agreeArgs); - Object op = verifierClient.ipex().submitAgree( + ExchangeOperation op = verifierClient.ipex().submitAgree( verifierAid.name, result.exn(), result.sigs(), Collections.singletonList(holderAid.prefix) ); waitOperation(verifierClient, op); @@ -477,7 +477,7 @@ public void single_signature_credentials() throws Exception { Exchanging.ExchangeMessageResult result = holderClient.ipex().grant(grantArgs); - Object op = holderClient.ipex().submitGrant( + ExchangeOperation op = holderClient.ipex().submitGrant( holderAid.name, result.exn(), result.sigs(), result.atc(), Collections.singletonList(verifierAid.prefix) ); waitOperation(holderClient, op); @@ -507,7 +507,7 @@ public void single_signature_credentials() throws Exception { admitArgs.setDatetime(createTimestamp()); Exchanging.ExchangeMessageResult result = verifierClient.ipex().admit(admitArgs); - Object op = verifierClient.ipex().submitAdmit( + ExchangeOperation op = verifierClient.ipex().submitAdmit( verifierAid.name, result.exn(), result.sigs(), result.atc(), Collections.singletonList(holderAid.prefix) ); waitOperation(verifierClient, op); @@ -618,7 +618,7 @@ public void single_signature_credentials() throws Exception { grantArgs.setDatetime(dt); Exchanging.ExchangeMessageResult result = holderClient.ipex().grant(grantArgs); - Object op = holderClient.ipex().submitGrant( + ExchangeOperation op = holderClient.ipex().submitGrant( holderAid.name, result.exn(), result.sigs(), result.atc(), Collections.singletonList(legalEntityAid.prefix) ); waitOperation(holderClient, op); @@ -640,7 +640,7 @@ public void single_signature_credentials() throws Exception { admitArgs.setDatetime(createTimestamp()); Exchanging.ExchangeMessageResult result = legalEntityClient.ipex().admit(admitArgs); - Object op = legalEntityClient.ipex().submitAdmit( + ExchangeOperation op = legalEntityClient.ipex().submitAdmit( legalEntityAid.name, result.exn(), result.sigs(), result.atc(), Collections.singletonList(holderAid.prefix) ); waitOperation(legalEntityClient, op); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/DelegationMultisigTest.java b/src/test/java/org/cardanofoundation/signify/e2e/DelegationMultisigTest.java index a1340368..ab0f3906 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/DelegationMultisigTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/DelegationMultisigTest.java @@ -2,13 +2,14 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.cardanofoundation.signify.app.clienting.SignifyClient; -import org.cardanofoundation.signify.app.coring.Operation; import org.cardanofoundation.signify.e2e.utils.MultisigUtils; import org.cardanofoundation.signify.e2e.utils.Retry; import org.cardanofoundation.signify.e2e.utils.TestSteps; import org.cardanofoundation.signify.e2e.utils.TestUtils; import org.cardanofoundation.signify.generated.keria.model.HabState; import org.cardanofoundation.signify.generated.keria.model.OOBI; +import org.cardanofoundation.signify.generated.keria.model.Operation; +import org.cardanofoundation.signify.generated.keria.model.QueryOperation; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -86,7 +87,7 @@ void delegationMultisigTest() throws Exception { // First member start the creation of a multisig identifier // Create a multisig AID for the GEDA. // Skip if a GEDA AID has already been incepted. - Object otor1Object = testSteps.step(String.format("%s(%s) initiated delegator multisig, waiting for %s(%s) to join...", + Operation otor1 = testSteps.step(String.format("%s(%s) initiated delegator multisig, waiting for %s(%s) to join...", delegator1Name, delegator1Aid.getPrefix(), delegator2Name, delegator2Aid.getPrefix()), () -> { MultisigUtils.StartMultisigInceptArgs startMultisigInceptArgs = MultisigUtils.StartMultisigInceptArgs @@ -109,8 +110,6 @@ void delegationMultisigTest() throws Exception { } }); - Operation otor1 = Operation.fromObject(otor1Object); - TestUtils.Notification ntor; Retry.RetryOptions options = Retry.RetryOptions.builder() .maxSleep(10000) @@ -130,8 +129,7 @@ void delegationMultisigTest() throws Exception { .msgSaid(ntor.getA().getD()) .build(); - Object otor2Object = MultisigUtils.acceptMultisigIncept(delegator2Client, acceptMultisigInceptArgs); - Operation otor2 = Operation.fromObject(otor2Object); + Operation otor2 = MultisigUtils.acceptMultisigIncept(delegator2Client, acceptMultisigInceptArgs); String torpre = otor1.getName().split("\\.")[1]; @@ -152,7 +150,7 @@ void delegationMultisigTest() throws Exception { String delegatorGroupNameOobi = testSteps.step(String.format("Add and resolve delegator OOBI %s(%s)", delegatorGroupName, adelegatorGroupName.getPrefix()), () -> { String timestamp = createTimestamp(); try { - List opList1 = MultisigUtils.addEndRoleMultisig(delegator1Client, + List opList1 = MultisigUtils.addEndRoleMultisig(delegator1Client, delegatorGroupName, delegator1Aid, List.of(delegator2Aid), @@ -160,7 +158,7 @@ void delegationMultisigTest() throws Exception { timestamp, true); - List opList2 = MultisigUtils.addEndRoleMultisig(delegator2Client, + List opList2 = MultisigUtils.addEndRoleMultisig(delegator2Client, delegatorGroupName, delegator2Aid, List.of(delegator1Aid), @@ -199,7 +197,7 @@ void delegationMultisigTest() throws Exception { new GetOrCreateContactArgs(delegatee2Client, delegateeGroupName, oobiGtor) ); - Object opDelegatee1 = testSteps.step(delegatee1Name + "(" + delegatee1Aid.getPrefix() + ") initiated delegatee multisig, waiting for " + Operation opDelegatee1 = testSteps.step(delegatee1Name + "(" + delegatee1Aid.getPrefix() + ") initiated delegatee multisig, waiting for " + delegatee2Name + "(" + delegatee2Aid.getPrefix() + ") to join...", () -> { MultisigUtils.StartMultisigInceptArgs startMultisigInceptArgs = MultisigUtils.StartMultisigInceptArgs .builder() @@ -233,7 +231,7 @@ void delegationMultisigTest() throws Exception { .groupName(delegateeGroupName) .msgSaid(ntee.getA().getD()) .build(); - Object opDelegatee2 = MultisigUtils.acceptMultisigIncept(delegatee2Client, acceptMultisigInceptArgs); + Operation opDelegatee2 = MultisigUtils.acceptMultisigIncept(delegatee2Client, acceptMultisigInceptArgs); System.out.println(delegatee2Name + " joined multisig, waiting for delegator..."); HabState agtee1 = delegatee1Client.identifiers().get(delegateeGroupName).get(); @@ -242,8 +240,8 @@ void delegationMultisigTest() throws Exception { assertEquals(agtee1.getPrefix(), agtee2.getPrefix()); assertEquals(agtee1.getName(), agtee2.getName()); - String teepre = Operation.fromObject(opDelegatee1).getName().split("\\.")[1]; - assertEquals(teepre, Operation.fromObject(opDelegatee2).getName().split("\\.")[1]); + String teepre = opDelegatee1.getName().split("\\.")[1]; + assertEquals(teepre, opDelegatee2.getName().split("\\.")[1]); testSteps.step("delegator anchors/approves delegation", () -> { // GEDA anchors delegation with an interaction event. @@ -254,7 +252,7 @@ void delegationMultisigTest() throws Exception { }}; try { - Object delApprOp1 = MultisigUtils.delegateMultisig( + Operation delApprOp1 = MultisigUtils.delegateMultisig( delegator1Client, delegator1Aid, Collections.singletonList(delegator2Aid), @@ -262,7 +260,7 @@ void delegationMultisigTest() throws Exception { anchor, true); - Object delApprOp2 = MultisigUtils.delegateMultisig( + Operation delApprOp2 = MultisigUtils.delegateMultisig( delegator2Client, delegator2Aid, Collections.singletonList(delegator1Aid), @@ -270,11 +268,11 @@ void delegationMultisigTest() throws Exception { anchor, false); - Operation dresult1 = waitOperation(delegator1Client, delApprOp1); - Object responseDresult1 = dresult1.getResponse(); + Operation dresult1 = waitOperation(delegator1Client, delApprOp1); + Object responseDresult1 = dresult1.getName(); - Operation dresult2 = waitOperation(delegator2Client, delApprOp2); - Object responseDresult2 = dresult2.getResponse(); + Operation dresult2 = waitOperation(delegator2Client, delApprOp2); + Object responseDresult2 = dresult2.getName(); assertEquals(responseDresult1, responseDresult2); waitAndMarkNotification(delegator1Client, "/multisig/ixn"); @@ -283,8 +281,8 @@ void delegationMultisigTest() throws Exception { } }); - Object queryOp1 = delegator1Client.keyStates().query(adelegatorGroupName.getPrefix(), "1", null); - Object queryOp2 = delegator2Client.keyStates().query(adelegatorGroupName.getPrefix(), "1", null); + QueryOperation queryOp1 = delegator1Client.keyStates().query(adelegatorGroupName.getPrefix(), "1", null); + QueryOperation queryOp2 = delegator2Client.keyStates().query(adelegatorGroupName.getPrefix(), "1", null); waitOperationAsync( new WaitOperationArgs(delegator1Client, queryOp1), @@ -292,8 +290,8 @@ void delegationMultisigTest() throws Exception { ); // QARs query the GEDA's key state - Object ksteetor1 = delegatee1Client.keyStates().query(adelegatorGroupName.getPrefix(), "1", null); - Object ksteetor2 = delegatee2Client.keyStates().query(adelegatorGroupName.getPrefix(), "1", null); + QueryOperation ksteetor1 = delegatee1Client.keyStates().query(adelegatorGroupName.getPrefix(), "1", null); + QueryOperation ksteetor2 = delegatee2Client.keyStates().query(adelegatorGroupName.getPrefix(), "1", null); waitOperationAsync( new WaitOperationArgs(delegatee1Client, ksteetor1), diff --git a/src/test/java/org/cardanofoundation/signify/e2e/DelegationTest.java b/src/test/java/org/cardanofoundation/signify/e2e/DelegationTest.java index 68051e8e..e294571e 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/DelegationTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/DelegationTest.java @@ -5,11 +5,11 @@ import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.app.coring.Coring; -import org.cardanofoundation.signify.app.coring.Operation; -import org.cardanofoundation.signify.cesr.Salter; import org.cardanofoundation.signify.e2e.utils.TestSteps; import org.cardanofoundation.signify.generated.keria.model.HabState; import org.cardanofoundation.signify.generated.keria.model.OOBI; +import org.cardanofoundation.signify.generated.keria.model.Operation; +import org.cardanofoundation.signify.generated.keria.model.QueryOperation; import org.cardanofoundation.signify.generated.keria.model.Tier; import org.junit.jupiter.api.Test; @@ -84,7 +84,7 @@ void delegationTest() throws Exception { CreateIdentifierArgs delpre = new CreateIdentifierArgs(); delpre.setDelpre(ator.getPrefix()); EventResult icpResult2 = client2.identifiers().create("delegate", delpre); - Operation op2 = Operation.fromObject(icpResult2.op()); + Operation op2 = icpResult2.op(); opResponseName = op2.getName(); String delegatePrefix = opResponseName.split("\\.")[1]; System.out.println("Delegate's prefix: " + delegatePrefix); @@ -106,7 +106,7 @@ void delegationTest() throws Exception { assertEquals(approDelResList.getFirst(), anchor); }); - Object op3 = client2.keyStates().query(ator.getPrefix(), "1", null); + QueryOperation op3 = client2.keyStates().query(ator.getPrefix(), "1", null); waitOperation(client2, op3); // Client 2 check approval diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigHolderTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigHolderTest.java index 5ae7e049..906dac11 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigHolderTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigHolderTest.java @@ -18,6 +18,7 @@ import org.cardanofoundation.signify.generated.keria.model.CredentialSad; import org.cardanofoundation.signify.generated.keria.model.CredentialState; import org.cardanofoundation.signify.generated.keria.model.ExchangeResource; +import org.cardanofoundation.signify.generated.keria.model.ExchangeOperation; import org.cardanofoundation.signify.generated.keria.model.Exn; import org.cardanofoundation.signify.generated.keria.model.ExnMultisig; import org.cardanofoundation.signify.generated.keria.model.GroupMember; @@ -29,7 +30,9 @@ import org.cardanofoundation.signify.e2e.utils.ResolveEnv; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; import org.cardanofoundation.signify.generated.keria.model.OOBI; +import org.cardanofoundation.signify.generated.keria.model.Operation; import org.cardanofoundation.signify.generated.keria.model.Registry; +import org.cardanofoundation.signify.generated.keria.model.RegistryOperation; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -94,7 +97,7 @@ void multisigHolderTest() throws Exception { oobis2 = getOobisIndexAt0(oobis.get(1)); oobis3 = getOobisIndexAt0(oobis.get(2)); - Object op1 = client1.oobis().resolve(oobis2, "member2"); + Operation op1 = client1.oobis().resolve(oobis2, "member2"); op1 = waitOperation(client1, op1); op1 = client1.oobis().resolve(oobis3, "member3"); op1 = waitOperation(client1, op1); @@ -102,7 +105,7 @@ void multisigHolderTest() throws Exception { op1 = waitOperation(client1, op1); System.out.println("Member1 resolved 3 OOBIs"); - Object op2 = client2.oobis().resolve(oobis1, "member1"); + Operation op2 = client2.oobis().resolve(oobis1, "member1"); op2 = waitOperation(client2, op2); op2 = client2.oobis().resolve(oobis3, "member3"); op2 = waitOperation(client2, op2); @@ -110,7 +113,7 @@ void multisigHolderTest() throws Exception { op2 = waitOperation(client2, op2); System.out.println("Member2 resolved 3 OOBIs"); - Object op3 = client3.oobis().resolve(oobis1, "member1"); + Operation op3 = client3.oobis().resolve(oobis1, "member1"); op3 = waitOperation(client3, op3); op3 = client3.oobis().resolve(oobis2, "member2"); op3 = waitOperation(client3, op3); @@ -210,7 +213,7 @@ void multisigHolderTest() throws Exception { .map(KeyStateRecord::getI) .collect(Collectors.toList()); - Object resp = client1.exchanges().send( + Exn resp = client1.exchanges().send( "member1", "multisig", aid1, @@ -504,7 +507,7 @@ public Object createRegistry(SignifyClient client, String name, String registryN .build(); RegistryResult result = client.registries().create(args); - Object op = result.op(); + RegistryOperation op = result.op(); waitOperation(client, op); List registryList = client.registries().list(name); @@ -549,7 +552,7 @@ public Object issueCredential( List gsigs = grantResult.sigs(); String end = grantResult.atc(); - Object op = client + ExchangeOperation op = client .ipex() .submitGrant(name, grant, gsigs, end, List.of(data.getA().getI())); waitOperation(client, op); @@ -559,7 +562,7 @@ public Object issueCredential( return cred; } - public Object multisigAdmitCredential( + public ExchangeOperation multisigAdmitCredential( SignifyClient client, String groupName, String memberAlias, @@ -583,7 +586,7 @@ public Object multisigAdmitCredential( List sigs = exchangeMessageResult.sigs(); String end = exchangeMessageResult.atc(); - Object op = client.ipex().submitAdmit( + ExchangeOperation op = client.ipex().submitAdmit( groupName, admit, sigs, diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigInceptionTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigInceptionTest.java index daf3bea6..2fd72e78 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigInceptionTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigInceptionTest.java @@ -8,6 +8,8 @@ import org.cardanofoundation.signify.e2e.utils.TestUtils.Notification; import org.cardanofoundation.signify.generated.keria.model.GroupMember; import org.cardanofoundation.signify.generated.keria.model.HabState; +import org.cardanofoundation.signify.generated.keria.model.OOBI; +import org.cardanofoundation.signify.generated.keria.model.Operation; import org.junit.jupiter.api.Test; import java.util.ArrayList; @@ -23,7 +25,7 @@ public class MultisigInceptionTest extends BaseIntegrationTest { SignifyClient client1, client2; String aid1, aid2; - Object oobi1, oobi2; + OOBI oobi1, oobi2; TestSteps testSteps = new TestSteps(); @Test @@ -39,14 +41,14 @@ public void testMultisigInception() throws Exception { oobi1 = client1.oobis().get("member1", "agent").get(); oobi2 = client2.oobis().get("member2", "agent").get(); - TestUtils.resolveOobi(client1, Utils.toList(Utils.toMap(oobi2).get("oobis")).getFirst(), "member2"); - TestUtils.resolveOobi(client2, Utils.toList(Utils.toMap(oobi1).get("oobis")).getFirst(), "member1"); + TestUtils.resolveOobi(client1, oobi2.getOobis().getFirst(), "member2"); + TestUtils.resolveOobi(client2, oobi1.getOobis().getFirst(), "member1"); return null; }); testSteps.step("Create multisig group", () -> { String groupName = "multisig"; - Object op1 = startMultisigIncept(client1, MultisigUtils.StartMultisigInceptArgs.builder() + Operation op1 = startMultisigIncept(client1, MultisigUtils.StartMultisigInceptArgs.builder() .groupName(groupName) .localMemberName("member1") .participants(Arrays.asList(aid1, aid2)) @@ -69,7 +71,7 @@ public void testMultisigInception() throws Exception { String msgSaid = notifications.getLast().getA().getD(); assertNotNull(msgSaid, "msgSaid not defined"); - Object op2 = acceptMultisigIncept(client2, MultisigUtils.AcceptMultisigInceptArgs.builder() + Operation op2 = acceptMultisigIncept(client2, MultisigUtils.AcceptMultisigInceptArgs.builder() .localMemberName("member2") .groupName(groupName) .msgSaid(msgSaid) @@ -99,7 +101,7 @@ public void testMultisigInception() throws Exception { testSteps.step("Test creating another group", () -> { String groupName = "multisig2"; - Object op1 = startMultisigIncept(client1, MultisigUtils.StartMultisigInceptArgs.builder() + Operation op1 = startMultisigIncept(client1, MultisigUtils.StartMultisigInceptArgs.builder() .groupName(groupName) .localMemberName("member1") .participants(List.of(aid1, aid2)) @@ -119,7 +121,7 @@ public void testMultisigInception() throws Exception { String msgSaid = notifications.getLast().getA().getD(); assertNotNull(msgSaid, "msgSaid not defined"); - Object op2 = acceptMultisigIncept(client2, MultisigUtils.AcceptMultisigInceptArgs.builder() + Operation op2 = acceptMultisigIncept(client2, MultisigUtils.AcceptMultisigInceptArgs.builder() .localMemberName("member2") .groupName(groupName) .msgSaid(msgSaid) diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigJoinTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigJoinTest.java index a56f282f..bdc69f8d 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigJoinTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigJoinTest.java @@ -4,7 +4,6 @@ import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.aiding.RotateIdentifierArgs; import org.cardanofoundation.signify.app.clienting.SignifyClient; -import org.cardanofoundation.signify.app.coring.Operation; import org.cardanofoundation.signify.cesr.Keeping; import org.cardanofoundation.signify.cesr.Serder; import org.cardanofoundation.signify.cesr.Siger; @@ -17,7 +16,10 @@ import org.cardanofoundation.signify.generated.keria.model.GroupMember; import org.cardanofoundation.signify.generated.keria.model.HabState; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; +import org.cardanofoundation.signify.generated.keria.model.CompletedQueryOperation; import org.cardanofoundation.signify.generated.keria.model.OOBI; +import org.cardanofoundation.signify.generated.keria.model.Operation; +import org.cardanofoundation.signify.generated.keria.model.QueryOperation; import org.junit.jupiter.api.*; import java.util.*; @@ -26,7 +28,7 @@ import static org.cardanofoundation.signify.e2e.utils.TestUtils.*; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertNotNull; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class MultisigJoinTest extends BaseIntegrationTest { @@ -86,7 +88,7 @@ public void multisigJoinTest() throws Exception { EventResult icpResult = client1.identifiers().create(nameMultisig, kargs); - Object createMultisig1 = icpResult.op(); + Operation createMultisig1 = icpResult.op(); Serder serder = icpResult.serder(); List sigs = icpResult.sigs(); List sigers = sigs.stream() @@ -134,25 +136,20 @@ public void multisigJoinTest() throws Exception { EventResult icpResult2 = client2.identifiers().create(nameMultisig, iargs2); - Object createMultisig2 = icpResult2.op(); + Operation createMultisig2 = icpResult2.op(); List op = waitOperationAsync( new WaitOperationArgs(client1, createMultisig1), new WaitOperationArgs(client2, createMultisig2) ); - createMultisig1 = op.get(0); - createMultisig2 = op.get(1); + HabState multisig1 = client1.identifiers().get(nameMultisig).get(); + HabState multisig2 = client2.identifiers().get(nameMultisig).get(); - Map multisigRes1 = castObjectToLinkedHashMap( - Utils.toMap(createMultisig1).get("response")); - Map multisigRes2 = castObjectToLinkedHashMap( - Utils.toMap(createMultisig2).get("response")); - - assertEquals(aid1.getState().getK().getFirst(), Utils.toList(multisigRes1.get("k")).getFirst()); - assertEquals(aid2.getState().getK().getFirst(), Utils.toList(multisigRes1.get("k")).get(1)); - assertEquals(aid1.getState().getK().getFirst(), Utils.toList(multisigRes2.get("k")).getFirst()); - assertEquals(aid2.getState().getK().getFirst(), Utils.toList(multisigRes2.get("k")).get(1)); + assertEquals(aid1.getState().getK().getFirst(), multisig1.getState().getK().getFirst()); + assertEquals(aid2.getState().getK().getFirst(), multisig1.getState().getK().get(1)); + assertEquals(aid1.getState().getK().getFirst(), multisig2.getState().getK().getFirst()); + assertEquals(aid2.getState().getK().getFirst(), multisig2.getState().getK().get(1)); GroupMember membersAgent1 = client1.identifiers().members(nameMultisig); GroupMember membersAgent2 = client2.identifiers().members(nameMultisig); @@ -206,7 +203,7 @@ public void multisigJoinTestAddMember3() throws Exception { aid1 = client1.identifiers().get(nameMember1).get(); aid2 = client2.identifiers().get(nameMember2).get(); - List updates = getKeyStateQuerAsync( + List updates = getKeyStateQuerAsync( new GetKeyStateQueryArgs(client1, aid2.getPrefix(), "1"), new GetKeyStateQueryArgs(client1, aid3.getPrefix(), "0"), new GetKeyStateQueryArgs(client2, aid1.getPrefix(), "1"), @@ -224,13 +221,10 @@ public void multisigJoinTestAddMember3() throws Exception { new WaitOperationArgs(client3, updates.get(4)), new WaitOperationArgs(client3, updates.get(5)) ); - Object aid2States = statesUpdate.get(0); - Object aid1States = statesUpdate.get(2); - Object aid3States = statesUpdate.get(1); - KeyStateRecord aid2State = Utils.fromJson(Utils.jsonStringify(Operation.fromObject(aid2States).getResponse()), KeyStateRecord.class); - KeyStateRecord aid1State = Utils.fromJson(Utils.jsonStringify(Operation.fromObject(aid1States).getResponse()), KeyStateRecord.class); - KeyStateRecord aid3State = Utils.fromJson(Utils.jsonStringify(Operation.fromObject(aid3States).getResponse()), KeyStateRecord.class); + KeyStateRecord aid2State = ((CompletedQueryOperation) statesUpdate.get(0)).getResponse(); + KeyStateRecord aid3State = ((CompletedQueryOperation) statesUpdate.get(1)).getResponse(); + KeyStateRecord aid1State = ((CompletedQueryOperation) statesUpdate.get(2)).getResponse(); List states = Arrays.asList(aid1State, aid2State); List rstates = new ArrayList<>(states); @@ -311,7 +305,7 @@ public void signingKeysAndJoinTest() throws Exception { aid2 = client2.identifiers().get(nameMember2).get(); aid3 = client3.identifiers().get(nameMember3).get(); - List updates = getKeyStateQuerAsync( + List updates = getKeyStateQuerAsync( new GetKeyStateQueryArgs(client1, aid2.getPrefix(), "2"), new GetKeyStateQueryArgs(client1, aid3.getPrefix(), "1"), new GetKeyStateQueryArgs(client2, aid1.getPrefix(), "2"), @@ -329,13 +323,10 @@ public void signingKeysAndJoinTest() throws Exception { new WaitOperationArgs(client3, updates.get(4)), new WaitOperationArgs(client3, updates.get(5)) ); - Object aid2States = statesUpdate.get(0); - Object aid1States = statesUpdate.get(2); - Object aid3States = statesUpdate.get(1); - KeyStateRecord aid2State = Utils.fromJson(Utils.jsonStringify(Operation.fromObject(aid2States).getResponse()), KeyStateRecord.class); - KeyStateRecord aid1State = Utils.fromJson(Utils.jsonStringify(Operation.fromObject(aid1States).getResponse()), KeyStateRecord.class); - KeyStateRecord aid3State = Utils.fromJson(Utils.jsonStringify(Operation.fromObject(aid3States).getResponse()), KeyStateRecord.class); + KeyStateRecord aid2State = ((CompletedQueryOperation) statesUpdate.get(0)).getResponse(); + KeyStateRecord aid3State = ((CompletedQueryOperation) statesUpdate.get(1)).getResponse(); + KeyStateRecord aid1State = ((CompletedQueryOperation) statesUpdate.get(2)).getResponse(); List states = Arrays.asList(aid1State, aid2State, aid3State); @@ -392,7 +383,7 @@ public void signingKeysAndJoinTest() throws Exception { Keeping.Keeper keeper3 = client3.getManager().get(aid3); List sig3 = keeper3.sign(serder3.getRaw().getBytes()).signatures(); - Object joinOperation = client3.groups() + Operation joinOperation = Utils.fromJson(Utils.jsonStringify(client3.groups() .join( nameMultisig, serder3, @@ -400,7 +391,7 @@ public void signingKeysAndJoinTest() throws Exception { Utils.toMap(exn3.getA()).get("gid").toString(), smids, rmids - ); + )), Operation.class); waitOperation(client3, joinOperation); @@ -420,10 +411,9 @@ public void signingKeysAndJoinTest() throws Exception { String eid = members.getSigning().get(2).getEnds().getAgent().keySet().iterator().next(); EventResult endRoleOperation = client3.identifiers().addEndRole(nameMultisig, "agent", eid, null); - Object endRoleResult = waitOperation(client3, endRoleOperation.op()); + Operation endRoleResult = waitOperation(client3, endRoleOperation.op()); - assertEquals("true", Utils.toMap(endRoleResult).get("done").toString()); - assertNull(Utils.toMap(endRoleResult).get("error")); + assertNotNull(endRoleResult); } public static HabState createAID(SignifyClient client, String name, List wits) throws Exception { diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java index 3e66f004..0ba7c346 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java @@ -7,7 +7,6 @@ import org.cardanofoundation.signify.app.aiding.RotateIdentifierArgs; import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.app.coring.Coring; -import org.cardanofoundation.signify.app.coring.Operation; import org.cardanofoundation.signify.app.credentialing.credentials.CredentialData; import org.cardanofoundation.signify.app.credentialing.credentials.CredentialFilter; import org.cardanofoundation.signify.app.credentialing.credentials.IssueCredentialResult; @@ -30,6 +29,10 @@ import org.cardanofoundation.signify.generated.keria.model.ExnMultisig; import org.cardanofoundation.signify.generated.keria.model.GroupMember; import org.cardanofoundation.signify.generated.keria.model.HabState; +import org.cardanofoundation.signify.generated.keria.model.Operation; +import org.cardanofoundation.signify.generated.keria.model.CompletedChallengeOperation; +import org.cardanofoundation.signify.generated.keria.model.CompletedQueryOperation; +import org.cardanofoundation.signify.generated.keria.model.RegistryOperation; import org.cardanofoundation.signify.e2e.utils.MultisigUtils; import org.cardanofoundation.signify.e2e.utils.ResolveEnv; import org.cardanofoundation.signify.e2e.utils.TestUtils; @@ -100,7 +103,7 @@ public void multisig() throws Exception { String oobis3 = getOobisIndexAt0(oobi3); String oobis4 = getOobisIndexAt0(oobi4); - Object op1 = client1.oobis().resolve(oobis2, "member2"); + Operation op1 = client1.oobis().resolve(oobis2, "member2"); op1 = waitOperation(client1, op1); op1 = client1.oobis().resolve(oobis3, "member3"); op1 = waitOperation(client1, op1); @@ -110,7 +113,7 @@ public void multisig() throws Exception { op1 = waitOperation(client1, op1); System.out.println("Member1 resolved 4 OOBIs"); - Object op2 = client2.oobis().resolve(oobis1, "member1"); + Operation op2 = client2.oobis().resolve(oobis1, "member1"); op2 = waitOperation(client2, op2); op2 = client2.oobis().resolve(oobis3, "member3"); op2 = waitOperation(client2, op2); @@ -120,7 +123,7 @@ public void multisig() throws Exception { op2 = waitOperation(client2, op2); System.out.println("Member2 resolved 4 OOBIs"); - Object op3 = client3.oobis().resolve(oobis1, "member1"); + Operation op3 = client3.oobis().resolve(oobis1, "member1"); op3 = waitOperation(client3, op3); op3 = client3.oobis().resolve(oobis2, "member2"); op3 = waitOperation(client3, op3); @@ -130,7 +133,7 @@ public void multisig() throws Exception { op3 = waitOperation(client3, op3); System.out.println("Member3 resolved 4 OOBIs"); - Object op4 = client4.oobis().resolve(oobis1, "member1"); + Operation op4 = client4.oobis().resolve(oobis1, "member1"); op4 = waitOperation(client4, op4); op4 = client4.oobis().resolve(oobis2, "member2"); op4 = waitOperation(client4, op4); @@ -156,17 +159,15 @@ public void multisig() throws Exception { op1 = client1.challenges().verify(aid2.getPrefix(), words); op1 = waitOperation(client1, op1); System.out.println("Member1 verified challenge response from member2"); - Map exnValue = (Map) Utils.toMap(Operation.fromObject(op1).getResponse()).get("exn"); - Serder exnwords = new Serder(exnValue); - op1 = client1.challenges().responded(aid2.getPrefix(), exnwords.getKed().get("d").toString()); + String exnD = ((CompletedChallengeOperation) op1).getResponse().getExn().getD(); + client1.challenges().responded(aid2.getPrefix(), exnD); System.out.println("Member1 marked challenge response as accepted"); op1 = client1.challenges().verify(aid3.getPrefix(), words); - op1 = operationToObject(waitOperation(client1, op1)); + op1 = waitOperation(client1, op1); System.out.println("Member1 verified challenge response from member3"); - exnValue = (Map) Utils.toMap(Operation.fromObject(op1).getResponse()).get("exn"); - exnwords = new Serder(exnValue); - op1 = client1.challenges().responded(aid3.getPrefix(), exnwords.getKed().get("d").toString()); + exnD = ((CompletedChallengeOperation) op1).getResponse().getExn().getD(); + client1.challenges().responded(aid3.getPrefix(), exnD); System.out.println("Member1 marked challenge response as accepted"); // First member start the creation of a multisig identifier @@ -267,12 +268,12 @@ public void multisig() throws Exception { aids3.get(1).getPrefix() ); - String multisig = Utils.toMap(aids3.get(1)).get("prefix").toString(); + String multisig = aids3.get(1).getPrefix(); HabState multisigAID = client1.identifiers().get("multisig").get(); String timestamp = TestUtils.createTimestamp(); - List opList1 = MultisigUtils.addEndRoleMultisigs( + List opList1 = MultisigUtils.addEndRoleMultisigs( client1, "multisig", aid1, @@ -282,7 +283,7 @@ public void multisig() throws Exception { true ); - List opList2 = MultisigUtils.addEndRoleMultisigs( + List opList2 = MultisigUtils.addEndRoleMultisigs( client2, "multisig", aid2, @@ -291,7 +292,7 @@ public void multisig() throws Exception { timestamp, false ); - List opList3 = MultisigUtils.addEndRoleMultisigs( + List opList3 = MultisigUtils.addEndRoleMultisigs( client3, "multisig", aid3, @@ -389,16 +390,16 @@ public void multisig() throws Exception { // Update new key states op1 = client1.keyStates().query(aid2.getPrefix(), "1"); op1 = waitOperation(client1, op1); - Object aid2State = Operation.fromObject(op1).getResponse(); + KeyStateRecord aid2State = ((CompletedQueryOperation) op1).getResponse(); op1 = client1.keyStates().query(aid3.getPrefix(), "1"); op1 = waitOperation(client1, op1); - Object aid3State = Operation.fromObject(op1).getResponse(); + KeyStateRecord aid3State = ((CompletedQueryOperation) op1).getResponse(); op2 = client2.keyStates().query(aid3.getPrefix(), "1"); op2 = waitOperation(client2, op2); op2 = client2.keyStates().query(aid1.getPrefix(), "1"); op2 = waitOperation(client2, op2); - Object aid1State = Operation.fromObject(op2).getResponse(); + KeyStateRecord aid1State = ((CompletedQueryOperation) op2).getResponse(); op3 = client3.keyStates().query(aid1.getPrefix(), "1"); op3 = waitOperation(client3, op3); @@ -412,11 +413,7 @@ public void multisig() throws Exception { op4 = client4.keyStates().query(aid3.getPrefix(), "1"); op4 = waitOperation(client4, op4); - List rstateLst = List.of( - Utils.fromJson(Utils.jsonStringify(aid1State), KeyStateRecord.class), - Utils.fromJson(Utils.jsonStringify(aid2State), KeyStateRecord.class), - Utils.fromJson(Utils.jsonStringify(aid3State), KeyStateRecord.class) - ); + List rstateLst = List.of(aid1State, aid2State, aid3State); List stateLst = rstateLst; // Multisig Rotation @@ -486,7 +483,7 @@ public void multisig() throws Exception { nonce, true ); - op1 = registryMultisigList.get(0); + op1 = (Operation) registryMultisigList.get(0); String regk = registryMultisigList.get(1).toString(); System.out.println("Member1 initiated registry, waiting for others to join..."); @@ -941,7 +938,7 @@ public static List createRegistryMultisig( .nonce(nonce) .build(); RegistryResult vcpResult = client.registries().create(createRegistryArgs); - Object op = vcpResult.op(); + RegistryOperation op = vcpResult.op(); Serder serder = vcpResult.getRegser(); String regk = serder.getPre(); @@ -974,13 +971,12 @@ public static List createRegistryMultisig( return list; } - public static Operation waitOperations( + public static Operation waitOperations( SignifyClient client, - Object op) throws IOException, InterruptedException, LibsodiumException { - Operation operation = Operation.fromObject(op); - String name = operation.getName(); - operation = client.operations().wait(operation); - TestUtils.deleteOperations(client, operation); + Operation op) throws IOException, InterruptedException, LibsodiumException { + String name = op.getName(); + Operation operation = client.operations().wait(name); + TestUtils.deleteOperations(client, name); TestUtils.deleteOperation(client, name); return operation; } diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigVleiIssuanaceTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigVleiIssuanaceTest.java index 512f4dfc..2d30a1ec 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigVleiIssuanaceTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigVleiIssuanaceTest.java @@ -3,7 +3,6 @@ import org.cardanofoundation.signify.app.aiding.CreateIdentifierArgs; import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.app.coring.Coring; -import org.cardanofoundation.signify.app.coring.Operation; import org.cardanofoundation.signify.app.credentialing.credentials.CredentialData; import org.cardanofoundation.signify.cesr.Saider; import org.cardanofoundation.signify.cesr.Salter; @@ -15,7 +14,10 @@ import org.cardanofoundation.signify.generated.keria.model.CredentialSad; import org.cardanofoundation.signify.generated.keria.model.HabState; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; +import org.cardanofoundation.signify.generated.keria.model.CredentialOperation; import org.cardanofoundation.signify.generated.keria.model.OOBI; +import org.cardanofoundation.signify.generated.keria.model.Operation; +import org.cardanofoundation.signify.generated.keria.model.QueryOperation; import org.cardanofoundation.signify.generated.keria.model.Registry; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -226,7 +228,7 @@ void testMultisigVleiIssuance() throws Exception { .build(); kargsMultisigAID.setMhab(aidGAR1); - Object multisigAIDOp1 = MultisigUtils.createAIDMultisig( + Operation multisigAIDOp1 = MultisigUtils.createAIDMultisig( clientGAR1, aidGAR1, List.of(aidGAR2), @@ -236,7 +238,7 @@ void testMultisigVleiIssuance() throws Exception { ); kargsMultisigAID.setMhab(aidGAR2); - Object multisigAIDOp2 = MultisigUtils.createAIDMultisig( + Operation multisigAIDOp2 = MultisigUtils.createAIDMultisig( clientGAR2, aidGAR2, List.of(aidGAR1), @@ -267,7 +269,7 @@ void testMultisigVleiIssuance() throws Exception { if (oobiGEDAbyGAR1.getOobis().size() == 0 || oobiGEDAbyGAR2.getOobis().size() == 0) { String timestamp = TestUtils.createTimestamp(); - List opList1 = MultisigUtils.addEndRoleMultisig( + List opList1 = MultisigUtils.addEndRoleMultisig( clientGAR1, aidGEDA.getName(), aidGAR1, @@ -277,7 +279,7 @@ void testMultisigVleiIssuance() throws Exception { true ); - List opList2 = MultisigUtils.addEndRoleMultisig( + List opList2 = MultisigUtils.addEndRoleMultisig( clientGAR2, aidGEDA.getName(), aidGAR2, @@ -337,7 +339,7 @@ void testMultisigVleiIssuance() throws Exception { .build(); kargsMultisigAID.setMhab(aidQAR1); - Object multisigAIDOp1 = MultisigUtils.createAIDMultisig( + Operation multisigAIDOp1 = MultisigUtils.createAIDMultisig( clientQAR1, aidQAR1, List.of(aidQAR2, aidQAR3), @@ -347,7 +349,7 @@ void testMultisigVleiIssuance() throws Exception { ); kargsMultisigAID.setMhab(aidQAR2); - Object multisigAIDOp2 = MultisigUtils.createAIDMultisig( + Operation multisigAIDOp2 = MultisigUtils.createAIDMultisig( clientQAR2, aidQAR2, List.of(aidQAR1, aidQAR3), @@ -357,7 +359,7 @@ void testMultisigVleiIssuance() throws Exception { ); kargsMultisigAID.setMhab(aidQAR3); - Object multisigAIDOp3 = MultisigUtils.createAIDMultisig( + Operation multisigAIDOp3 = MultisigUtils.createAIDMultisig( clientQAR3, aidQAR3, List.of(aidQAR1, aidQAR2), @@ -366,9 +368,9 @@ void testMultisigVleiIssuance() throws Exception { false ); - String aidQVIPrefix = Operation.fromObject(multisigAIDOp1).getName().split("\\.")[1]; - assertEquals(aidQVIPrefix, Operation.fromObject(multisigAIDOp2).getName().split("\\.")[1]); - assertEquals(aidQVIPrefix, Operation.fromObject(multisigAIDOp3).getName().split("\\.")[1]); + String aidQVIPrefix = multisigAIDOp1.getName().split("\\.")[1]; + assertEquals(aidQVIPrefix, multisigAIDOp2.getName().split("\\.")[1]); + assertEquals(aidQVIPrefix, multisigAIDOp3.getName().split("\\.")[1]); // GEDA anchors delegation with an interaction event. Map anchor = new LinkedHashMap<>() {{ @@ -376,7 +378,7 @@ void testMultisigVleiIssuance() throws Exception { put("s", "0"); put("d", aidQVIPrefix); }}; - Object ixnOp1 = MultisigUtils.delegateMultisig( + Operation ixnOp1 = MultisigUtils.delegateMultisig( clientGAR1, aidGAR1, List.of(aidGAR2), @@ -385,7 +387,7 @@ void testMultisigVleiIssuance() throws Exception { true ); - Object ixnOp2 = MultisigUtils.delegateMultisig( + Operation ixnOp2 = MultisigUtils.delegateMultisig( clientGAR2, aidGAR2, List.of(aidGAR1), @@ -402,9 +404,9 @@ void testMultisigVleiIssuance() throws Exception { TestUtils.waitAndMarkNotification(clientGAR1, "/multisig/ixn"); // QARs query the GEDA's key state - Object queryOp1 = clientQAR1.keyStates().query(aidGEDA.getPrefix(), "1"); - Object queryOp2 = clientQAR2.keyStates().query(aidGEDA.getPrefix(), "1"); - Object queryOp3 = clientQAR3.keyStates().query(aidGEDA.getPrefix(), "1"); + QueryOperation queryOp1 = clientQAR1.keyStates().query(aidGEDA.getPrefix(), "1"); + QueryOperation queryOp2 = clientQAR2.keyStates().query(aidGEDA.getPrefix(), "1"); + QueryOperation queryOp3 = clientQAR3.keyStates().query(aidGEDA.getPrefix(), "1"); waitOperationAsync( new WaitOperationArgs(clientQAR1, multisigAIDOp1), @@ -443,7 +445,7 @@ void testMultisigVleiIssuance() throws Exception { || oobiQVIbyQAR2.getOobis().size() == 0 || oobiQVIbyQAR3.getOobis().size() == 0) { String timestamp = TestUtils.createTimestamp(); - List opList1 = MultisigUtils.addEndRoleMultisig( + List opList1 = MultisigUtils.addEndRoleMultisig( clientQAR1, aidQVI.getName(), aidQAR1, @@ -452,7 +454,7 @@ void testMultisigVleiIssuance() throws Exception { timestamp, true ); - List opList2 = MultisigUtils.addEndRoleMultisig( + List opList2 = MultisigUtils.addEndRoleMultisig( clientQAR2, aidQVI.getName(), aidQAR2, @@ -462,7 +464,7 @@ void testMultisigVleiIssuance() throws Exception { false ); - List opList3 = MultisigUtils.addEndRoleMultisig( + List opList3 = MultisigUtils.addEndRoleMultisig( clientQAR3, aidQVI.getName(), aidQAR3, @@ -516,7 +518,7 @@ void testMultisigVleiIssuance() throws Exception { if (gedaRegistrybyGAR1.size() == 0 && gedaRegistrybyGAR2.size() == 0) { String nonce = Coring.randomNonce(); - Object registryOp1 = MultisigUtils.createRegistryMultisig( + Operation registryOp1 = MultisigUtils.createRegistryMultisig( clientGAR1, aidGAR1, List.of(aidGAR2), @@ -526,7 +528,7 @@ void testMultisigVleiIssuance() throws Exception { true ); - Object registryOp2 = MultisigUtils.createRegistryMultisig( + Operation registryOp2 = MultisigUtils.createRegistryMultisig( clientGAR2, aidGAR2, List.of(aidGAR1), @@ -579,7 +581,7 @@ void testMultisigVleiIssuance() throws Exception { .a(kargsSub) .build(); - Object IssOp1 = MultisigUtils.issueCredentialMultisig( + CredentialOperation IssOp1 = MultisigUtils.issueCredentialMultisig( clientGAR1, aidGAR1, List.of(aidGAR2), @@ -588,7 +590,7 @@ void testMultisigVleiIssuance() throws Exception { true ); - Object IssOp2 = MultisigUtils.issueCredentialMultisig( + CredentialOperation IssOp2 = MultisigUtils.issueCredentialMultisig( clientGAR2, aidGAR2, List.of(aidGAR1), @@ -737,7 +739,7 @@ void testMultisigVleiIssuance() throws Exception { .build(); kargsMultisigAID.setMhab(aidLAR1); - Object multisigAIDOp1 = MultisigUtils.createAIDMultisig( + Operation multisigAIDOp1 = MultisigUtils.createAIDMultisig( clientLAR1, aidLAR1, List.of(aidLAR2, aidLAR3), @@ -747,7 +749,7 @@ void testMultisigVleiIssuance() throws Exception { ); kargsMultisigAID.setMhab(aidLAR2); - Object multisigAIDOp2 = MultisigUtils.createAIDMultisig( + Operation multisigAIDOp2 = MultisigUtils.createAIDMultisig( clientLAR2, aidLAR2, List.of(aidLAR1, aidLAR3), @@ -757,7 +759,7 @@ void testMultisigVleiIssuance() throws Exception { ); kargsMultisigAID.setMhab(aidLAR3); - Object multisigAIDOp3 = MultisigUtils.createAIDMultisig( + Operation multisigAIDOp3 = MultisigUtils.createAIDMultisig( clientLAR3, aidLAR3, List.of(aidLAR1, aidLAR2), @@ -791,15 +793,15 @@ void testMultisigVleiIssuance() throws Exception { new GetOobisArgs(clientLAR2, aidLE.getName(), "agent"), new GetOobisArgs(clientLAR3, aidLE.getName(), "agent") ); - OOBI oobiLEbyLAR1 = (OOBI) oobiLst.get(0); - OOBI oobiLEbyLAR2 = (OOBI) oobiLst.get(1); - OOBI oobiLEbyLAR3 = (OOBI) oobiLst.get(2); + OOBI oobiLEbyLAR1 = oobiLst.get(0); + OOBI oobiLEbyLAR2 = oobiLst.get(1); + OOBI oobiLEbyLAR3 = oobiLst.get(2); if (oobiLEbyLAR1.getOobis().size() == 0 || oobiLEbyLAR2.getOobis().size() == 0 || oobiLEbyLAR3.getOobis().size() == 0) { String timestamp = TestUtils.createTimestamp(); - List opList1 = MultisigUtils.addEndRoleMultisig( + List opList1 = MultisigUtils.addEndRoleMultisig( clientLAR1, aidLE.getName(), aidLAR1, @@ -809,7 +811,7 @@ void testMultisigVleiIssuance() throws Exception { true ); - List opList2 = MultisigUtils.addEndRoleMultisig( + List opList2 = MultisigUtils.addEndRoleMultisig( clientLAR2, aidLE.getName(), aidLAR2, @@ -819,7 +821,7 @@ void testMultisigVleiIssuance() throws Exception { false ); - List opList3 = MultisigUtils.addEndRoleMultisig( + List opList3 = MultisigUtils.addEndRoleMultisig( clientLAR3, aidLE.getName(), aidLAR3, @@ -847,9 +849,9 @@ void testMultisigVleiIssuance() throws Exception { new GetOobisArgs(clientLAR2, aidLE.getName(), "agent"), new GetOobisArgs(clientLAR3, aidLE.getName(), "agent") ); - oobiLEbyLAR1 = (OOBI) oobiLst.get(0); - oobiLEbyLAR2 = (OOBI) oobiLst.get(1); - oobiLEbyLAR3 = (OOBI) oobiLst.get(2); + oobiLEbyLAR1 = oobiLst.get(0); + oobiLEbyLAR2 = oobiLst.get(1); + oobiLEbyLAR3 = oobiLst.get(2); } assertEquals(oobiLEbyLAR1.getRole(), oobiLEbyLAR2.getRole()); assertEquals(oobiLEbyLAR1.getRole(), oobiLEbyLAR3.getRole()); @@ -872,7 +874,7 @@ void testMultisigVleiIssuance() throws Exception { List qviRegistrybyQAR3 = clientQAR3.registries().list(aidQVI.getName()); if (qviRegistrybyQAR1.size() == 0 || qviRegistrybyQAR2.size() == 0 || qviRegistrybyQAR3.size() == 0) { String nonce = Coring.randomNonce(); - Object registryOp1 = MultisigUtils.createRegistryMultisig( + Operation registryOp1 = MultisigUtils.createRegistryMultisig( clientQAR1, aidQAR1, List.of(aidQAR2, aidQAR3), @@ -882,7 +884,7 @@ void testMultisigVleiIssuance() throws Exception { true ); - Object registryOp2 = MultisigUtils.createRegistryMultisig( + Operation registryOp2 = MultisigUtils.createRegistryMultisig( clientQAR2, aidQAR2, List.of(aidQAR1, aidQAR3), @@ -892,7 +894,7 @@ void testMultisigVleiIssuance() throws Exception { false ); - Object registryOp3 = MultisigUtils.createRegistryMultisig( + Operation registryOp3 = MultisigUtils.createRegistryMultisig( clientQAR3, aidQAR3, List.of(aidQAR1, aidQAR2), @@ -969,7 +971,7 @@ void testMultisigVleiIssuance() throws Exception { .r(LE_RULES) .build(); - Object IssOp1 = MultisigUtils.issueCredentialMultisig( + CredentialOperation IssOp1 = MultisigUtils.issueCredentialMultisig( clientQAR1, aidQAR1, List.of(aidQAR2, aidQAR3), @@ -978,7 +980,7 @@ void testMultisigVleiIssuance() throws Exception { true ); - Object IssOp2 = MultisigUtils.issueCredentialMultisig( + CredentialOperation IssOp2 = MultisigUtils.issueCredentialMultisig( clientQAR2, aidQAR2, List.of(aidQAR1, aidQAR3), @@ -987,7 +989,7 @@ void testMultisigVleiIssuance() throws Exception { false ); - Object IssOp3 = MultisigUtils.issueCredentialMultisig( + CredentialOperation IssOp3 = MultisigUtils.issueCredentialMultisig( clientQAR3, aidQAR3, List.of(aidQAR1, aidQAR2), @@ -1137,7 +1139,7 @@ void testMultisigVleiIssuance() throws Exception { if (leRegistrybyLAR1.isEmpty() && leRegistrybyLAR2.isEmpty() && leRegistrybyLAR3.isEmpty()) { String nonce = Coring.randomNonce(); - Object registryOp1 = MultisigUtils.createRegistryMultisig( + Operation registryOp1 = MultisigUtils.createRegistryMultisig( clientLAR1, aidLAR1, List.of(aidLAR2, aidLAR3), @@ -1147,7 +1149,7 @@ void testMultisigVleiIssuance() throws Exception { true ); - Object registryOp2 = MultisigUtils.createRegistryMultisig( + Operation registryOp2 = MultisigUtils.createRegistryMultisig( clientLAR2, aidLAR2, List.of(aidLAR1, aidLAR3), @@ -1157,7 +1159,7 @@ void testMultisigVleiIssuance() throws Exception { false ); - Object registryOp3 = MultisigUtils.createRegistryMultisig( + Operation registryOp3 = MultisigUtils.createRegistryMultisig( clientLAR3, aidLAR3, List.of(aidLAR1, aidLAR2), @@ -1233,7 +1235,7 @@ void testMultisigVleiIssuance() throws Exception { .r(ECR_RULES) .build(); - Object IssOp1 = MultisigUtils.issueCredentialMultisig( + CredentialOperation IssOp1 = MultisigUtils.issueCredentialMultisig( clientLAR1, aidLAR1, List.of(aidLAR2, aidLAR3), @@ -1242,7 +1244,7 @@ void testMultisigVleiIssuance() throws Exception { true ); - Object IssOp2 = MultisigUtils.issueCredentialMultisig( + CredentialOperation IssOp2 = MultisigUtils.issueCredentialMultisig( clientLAR2, aidLAR2, List.of(aidLAR1, aidLAR3), @@ -1251,7 +1253,7 @@ void testMultisigVleiIssuance() throws Exception { false ); - Object IssOp3 = MultisigUtils.issueCredentialMultisig( + CredentialOperation IssOp3 = MultisigUtils.issueCredentialMultisig( clientLAR3, aidLAR3, List.of(aidLAR1, aidLAR2), diff --git a/src/test/java/org/cardanofoundation/signify/e2e/RandyTest.java b/src/test/java/org/cardanofoundation/signify/e2e/RandyTest.java index 97273025..0edf1d72 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/RandyTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/RandyTest.java @@ -6,7 +6,6 @@ import org.cardanofoundation.signify.app.aiding.IdentifierListResponse; import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.app.coring.Coring; -import org.cardanofoundation.signify.app.coring.Operation; import org.cardanofoundation.signify.cesr.*; import org.cardanofoundation.signify.cesr.args.RawArgs; import org.cardanofoundation.signify.generated.keria.model.HabState; @@ -16,7 +15,6 @@ import org.junit.jupiter.api.Test; import java.util.Collections; -import java.util.HashMap; import java.util.List; import static org.cardanofoundation.signify.e2e.utils.TestUtils.*; @@ -28,8 +26,7 @@ public class RandyTest { private final String url = "http://127.0.0.1:3901"; private final String bootUrl = "http://127.0.0.1:3903"; private SignifyClient client1; - private String opResponseDone, opResponseName, opResponsePrefix; - private HashMap opResponse; + private String opResponseName, opResponsePrefix; @Test void randyTest() throws Exception { @@ -48,15 +45,9 @@ void randyTest() throws Exception { CreateIdentifierArgs kargs = new CreateIdentifierArgs(); kargs.setAlgo(Manager.Algos.randy); EventResult icpResult = client1.identifiers().create("aid1", kargs); - Operation op = Operation.fromObject(waitOperation(client1, icpResult.op())); + waitOperation(client1, icpResult.op()); - opResponse = (HashMap) op.getResponse(); - opResponseDone = op.isDone() ? "true" : "false"; - - assertEquals("true", opResponseDone); - - HashMap aid = opResponse; - Serder icp = new Serder(aid); + Serder icp = icpResult.serder(); assertEquals(1, icp.getVerfers().size()); assertEquals(1, icp.getDigers().size()); assertEquals("1", icp.getKed().get("kt")); @@ -74,10 +65,8 @@ void randyTest() throws Exception { assertEquals(icp.getPre(), opResponsePrefix); icpResult = client1.identifiers().interact("aid1", icp.getPre()); - op = Operation.fromObject(waitOperation(client1, icpResult.op())); - opResponse = (HashMap) op.getResponse(); - HashMap ked = opResponse; - Serder ixn = new Serder(ked); + waitOperation(client1, icpResult.op()); + Serder ixn = icpResult.serder(); assertEquals("1", ixn.getKed().get("s")); assertEquals(List.of(icp.getPre()), ixn.getKed().get("a")); @@ -94,11 +83,9 @@ void randyTest() throws Exception { assertEquals(2, logList.size()); icpResult = client1.identifiers().rotate("aid1"); - op = Operation.fromObject((waitOperation(client1, icpResult.op()))); - opResponse = (HashMap) op.getResponse(); + waitOperation(client1, icpResult.op()); - ked = opResponse; - Serder rot = new Serder(ked); + Serder rot = icpResult.serder(); assertEquals("2", rot.getKed().get("s")); assertEquals(1, rot.getVerfers().size()); assertEquals(1, rot.getDigers().size()); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/SaltyTests.java b/src/test/java/org/cardanofoundation/signify/e2e/SaltyTests.java index f81029f3..7858f5f3 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/SaltyTests.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/SaltyTests.java @@ -6,7 +6,6 @@ import org.cardanofoundation.signify.app.aiding.IdentifierListResponse; import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.app.coring.Coring; -import org.cardanofoundation.signify.app.coring.Operation; import org.cardanofoundation.signify.cesr.Serder; import org.cardanofoundation.signify.core.Manager; import org.cardanofoundation.signify.generated.keria.model.HabState; @@ -26,8 +25,6 @@ class SaltyTests { private final String url = "http://127.0.0.1:3901"; private final String bootUrl = "http://127.0.0.1:3903"; - private String opResponseDone, opResponsePrefix; - private HashMap opResponse; @Test void saltyTest() throws Exception { @@ -46,15 +43,9 @@ void saltyTest() throws Exception { CreateIdentifierArgs bran = new CreateIdentifierArgs(); bran.setBran("0123456789abcdefghijk"); EventResult icpResult = client.identifiers().create("aid1", bran); - Operation op = Operation.fromObject(waitOperation(client, icpResult.op())); + waitOperation(client, icpResult.op()); - opResponse = (HashMap) op.getResponse(); - opResponseDone = op.isDone() ? "true" : "false"; - - assertEquals("true", opResponseDone); - - HashMap aid = opResponse; - Serder icp = new Serder(aid); + Serder icp = icpResult.serder(); assertEquals("ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", icp.getPre()); assertEquals(1, icp.getVerfers().size()); @@ -86,11 +77,8 @@ void saltyTest() throws Exception { params.setBran("0123456789lmnopqrstuv"); EventResult icpResult1 = client.identifiers().create("aid2", params); - Operation op_1 = Operation.fromObject(waitOperation(client, icpResult1.op())); - opResponse = (HashMap) op_1.getResponse(); - opResponseDone = op_1.isDone() ? "true" : "false"; - HashMap aid2 = opResponse; - Serder icp2 = new Serder(aid2); + waitOperation(client, icpResult1.op()); + Serder icp2 = icpResult1.serder(); assertEquals("EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX", icp2.getPre()); assertEquals(3, icp2.getVerfers().size()); @@ -145,9 +133,8 @@ void saltyTest() throws Exception { // Rotate EventResult icpResultRotate = client.identifiers().rotate("aid1"); - Operation opRotate = waitOperation(client, icpResultRotate.op()); - Object ked = opRotate.getResponse(); - Serder rotRotate = new Serder((Map) ked); + waitOperation(client, icpResultRotate.op()); + Serder rotRotate = icpResultRotate.serder(); Assertions.assertEquals("EBQABdRgaxJONrSLcgrdtbASflkvLxJkiDO0H-XmuhGg", rotRotate.getKed().get("d")); Assertions.assertEquals("1", rotRotate.getKed().get("s")); @@ -158,9 +145,8 @@ void saltyTest() throws Exception { // Interact EventResult icpResultInteract = client.identifiers().interact("aid1", List.of(icp.getPre())); - Operation opInteract = waitOperation(client, icpResultInteract.op()); - Map kedInteract = (Map) opInteract.getResponse(); - Serder ixn = new Serder(kedInteract); + waitOperation(client, icpResultInteract.op()); + Serder ixn = icpResultInteract.serder(); Assertions.assertEquals("ENsmRAg_oM7Hl1S-GTRMA7s4y760lQMjzl0aqOQ2iTce", ixn.getKed().get("d")); Assertions.assertEquals("2", ixn.getKed().get("s")); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDIPTest.java b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDIPTest.java index 1ad9ffdc..77c6355d 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDIPTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDIPTest.java @@ -3,16 +3,17 @@ import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.app.aiding.CreateIdentifierArgs; import org.cardanofoundation.signify.app.aiding.EventResult; -import org.cardanofoundation.signify.app.coring.Operation; import org.cardanofoundation.signify.cesr.exceptions.LibsodiumException; import org.cardanofoundation.signify.e2e.utils.ResolveEnv; import org.cardanofoundation.signify.e2e.utils.TestUtils; +import org.cardanofoundation.signify.generated.keria.model.CompletedDelegationOperation; import org.cardanofoundation.signify.generated.keria.model.HabState; +import org.cardanofoundation.signify.generated.keria.model.Operation; +import org.cardanofoundation.signify.generated.keria.model.QueryOperation; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.*; import java.io.IOException; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -50,7 +51,7 @@ public void singlesig_dip() throws Exception { CreateIdentifierArgs kargs = new CreateIdentifierArgs(); kargs.setDelpre(name1_id); EventResult result = client2.identifiers().create("delegate1", kargs); - Operation op = Operation.fromObject(result.op()); + Operation op = result.op(); HabState delegate1 = client2.identifiers().get("delegate1").get(); opResponseName = op.getName(); Assertions.assertEquals(opResponseName, "delegation." + delegate1.getPrefix()); @@ -62,10 +63,10 @@ public void singlesig_dip() throws Exception { seal.put("d", delegate1.getPrefix()); result = client1.identifiers().interact("name1", seal); - Object op1 = result.op(); + Operation op1 = result.op(); // Refresh keystate to sn=1 - Object op2 = client2.keyStates().query(name1_id, "1", null); + QueryOperation op2 = client2.keyStates().query(name1_id, "1", null); List opList = waitOperationAsync( new WaitOperationArgs(client2, op), @@ -74,8 +75,7 @@ public void singlesig_dip() throws Exception { ); op = opList.getFirst(); - HashMap responseMap = (HashMap) op.getResponse(); - opResponseI = responseMap.get("i").toString(); + opResponseI = ((CompletedDelegationOperation) op).getResponse().getI(); delegate1 = client2.identifiers().get("delegate1").get(); Assertions.assertEquals(delegate1.getPrefix(), opResponseI); @@ -86,7 +86,7 @@ public void singlesig_dip() throws Exception { kargs.setToad(env.witnessIds().size()); kargs.setWits(env.witnessIds()); result = client2.identifiers().create("delegate2", kargs); - op = Operation.fromObject(result.op()); + op = result.op(); opResponseName = op.getName(); HabState delegate2 = client2.identifiers().get("delegate2").get(); @@ -111,15 +111,14 @@ public void singlesig_dip() throws Exception { ); op = opList.getFirst(); - responseMap = (HashMap) op.getResponse(); - opResponseI = responseMap.get("i").toString(); + opResponseI = ((CompletedDelegationOperation) op).getResponse().getI(); // Delegate waits for completion delegate2 = client2.identifiers().get("delegate2").get(); Assertions.assertEquals(delegate2.getPrefix(), opResponseI); // Make sure query with seal is idempotent - op = Operation.fromObject(client2.keyStates().query(name1_id, null, seal)); - waitOperation(client2, op); + QueryOperation queryOp = client2.keyStates().query(name1_id, null, seal); + waitOperation(client2, queryOp); } } diff --git a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDRTTest.java b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDRTTest.java index 70d74643..33628539 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDRTTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDRTTest.java @@ -5,16 +5,18 @@ import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.aiding.RotateIdentifierArgs; import org.cardanofoundation.signify.cesr.exceptions.LibsodiumException; -import org.cardanofoundation.signify.app.coring.Operation; import org.cardanofoundation.signify.e2e.utils.TestUtils; +import org.cardanofoundation.signify.generated.keria.model.CompletedDelegationOperation; +import org.cardanofoundation.signify.generated.keria.model.CompletedDelegationOperationResponse; import org.cardanofoundation.signify.generated.keria.model.HabState; +import org.cardanofoundation.signify.generated.keria.model.Operation; +import org.cardanofoundation.signify.generated.keria.model.QueryOperation; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.io.IOException; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -53,7 +55,7 @@ public void singlesig_drt() throws Exception { kargs.setDelpre(name1_id); EventResult result = delegate.identifiers().create("delegate1", kargs); - Operation op = Operation.fromObject(result.op()); + Operation op = result.op(); HabState delegate1 = delegate.identifiers().get("delegate1").get(); opResponseName = op.getName(); @@ -66,8 +68,8 @@ public void singlesig_drt() throws Exception { seal.put("d", delegate1.getPrefix()); result = delegator.identifiers().interact("name1", seal); - Object op1 = result.op(); - Object op2 = delegate.keyStates().query(name1_id, "1", null); + Operation op1 = result.op(); + QueryOperation op2 = delegate.keyStates().query(name1_id, "1", null); waitOperationAsync( new WaitOperationArgs(delegate, op), @@ -77,7 +79,7 @@ public void singlesig_drt() throws Exception { RotateIdentifierArgs karg = RotateIdentifierArgs.builder().build(); result = delegate.identifiers().rotate("delegate1", karg); - op = Operation.fromObject(result.op()); + op = result.op(); opResponseName = op.getName(); Assertions.assertEquals(opResponseName, "delegation." + result.serder().getKed().get("d")); @@ -100,9 +102,9 @@ public void singlesig_drt() throws Exception { ); op = operationList.getFirst(); - HashMap opResponse = (HashMap) op.getResponse(); - opResponseT = opResponse.get("t"); - opResponseS = opResponse.get("s"); + CompletedDelegationOperationResponse opResponse = ((CompletedDelegationOperation) op).getResponse(); + opResponseT = opResponse.getT(); + opResponseS = opResponse.getS(); Assertions.assertEquals("drt", opResponseT); Assertions.assertEquals("1", opResponseS); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigIXNTest.java b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigIXNTest.java index 61300c9f..cc672303 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigIXNTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigIXNTest.java @@ -2,16 +2,17 @@ import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.app.aiding.EventResult; -import org.cardanofoundation.signify.app.coring.Operation; import org.cardanofoundation.signify.cesr.exceptions.LibsodiumException; import org.cardanofoundation.signify.e2e.utils.TestUtils; +import org.cardanofoundation.signify.generated.keria.model.CompletedQueryOperation; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; +import org.cardanofoundation.signify.generated.keria.model.Operation; +import org.cardanofoundation.signify.generated.keria.model.QueryOperation; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.io.IOException; -import java.util.HashMap; import java.util.List; import static org.cardanofoundation.signify.e2e.utils.TestUtils.*; @@ -21,7 +22,6 @@ public class SinglesigIXNTest extends BaseIntegrationTest { static SignifyClient client1, client2; static String name1_id, name1_oobi; static String contact1_id; - private HashMap response; @BeforeAll public static void getClients() { @@ -88,14 +88,13 @@ public void singlesig_ixn_ixn1() throws Exception { // refresh remote keystate String sn = keyStateRecord1.getS(); - Object op = client2.keyStates().query(contact1_id, sn, null); - op = waitOperation(client2, op); + QueryOperation op = client2.keyStates().query(contact1_id, sn, null); + Operation completedOp = waitOperation(client2, op); - response = (HashMap) Operation.fromObject(op).getResponse(); - HashMap keyState3 = response; + KeyStateRecord keyState3 = ((CompletedQueryOperation) completedOp).getResponse(); // local and remote keystate match - assertEquals(keyState3.get("s"), + assertEquals(keyState3.getS(), keyStateRecord1.getS()); } } diff --git a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigROTTest.java b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigROTTest.java index 05f5923e..39c61e50 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigROTTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigROTTest.java @@ -3,17 +3,17 @@ import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.aiding.RotateIdentifierArgs; import org.cardanofoundation.signify.app.clienting.SignifyClient; -import org.cardanofoundation.signify.app.coring.Operation; import org.cardanofoundation.signify.cesr.exceptions.LibsodiumException; +import org.cardanofoundation.signify.generated.keria.model.CompletedQueryOperation; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; +import org.cardanofoundation.signify.generated.keria.model.Operation; +import org.cardanofoundation.signify.generated.keria.model.QueryOperation; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.io.IOException; -import java.util.*; import java.util.List; -import java.util.Map; import java.util.concurrent.ExecutionException; import static org.junit.jupiter.api.Assertions.*; @@ -23,7 +23,6 @@ public class SinglesigROTTest extends BaseIntegrationTest { static SignifyClient client1, client2; static String contact1_id; static String name1_id, name1_oobi; - private HashMap response; @BeforeAll public static void getClients() throws Exception { @@ -102,14 +101,13 @@ public void singlesig_rot_rot1() throws Exception { // refresh remote keystate String sn = keyStateRecord1.getS(); - Operation op = Operation.fromObject(client2.keyStates().query(contact1_id, sn, null)); - op = waitOperation(client2, op); - response = (HashMap) op.getResponse(); + QueryOperation queryOp = client2.keyStates().query(contact1_id, sn, null); + Operation completedOp = waitOperation(client2, queryOp); + KeyStateRecord keyState3 = ((CompletedQueryOperation) completedOp).getResponse(); - HashMap keyState3 = response; // local and remote keystate match - assertEquals(keyState3.get("s"), keyStateRecord1.getS()); - assertEquals(keyState3.get("k"), keyStateRecord1.getK()); - assertEquals(keyState3.get("n"), keyStateRecord1.getN()); + assertEquals(keyState3.getS(), keyStateRecord1.getS()); + assertEquals(keyState3.getK(), keyStateRecord1.getK()); + assertEquals(keyState3.getN(), keyStateRecord1.getN()); } } diff --git a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigVleiIssuanceTest.java b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigVleiIssuanceTest.java index 2a76fb72..10512052 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigVleiIssuanceTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigVleiIssuanceTest.java @@ -571,7 +571,7 @@ public void sendGrantMessage(SignifyClient senderClient, Aid senderAid, Aid reci .build(); Exchanging.ExchangeMessageResult result = senderClient.ipex().grant(grantArgs); - Object op = senderClient.ipex().submitGrant( + ExchangeOperation op = senderClient.ipex().submitGrant( senderAid.name, result.exn(), result.sigs(), @@ -596,7 +596,7 @@ public void sendAdmitMessage(SignifyClient senderClient, Aid senderAid, Aid reci .build(); Exchanging.ExchangeMessageResult result = senderClient.ipex().admit(admitArgs); - Object op = senderClient.ipex().submitAdmit( + ExchangeOperation op = senderClient.ipex().submitAdmit( senderAid.name, result.exn(), result.sigs(), diff --git a/src/test/java/org/cardanofoundation/signify/e2e/WitnessTest.java b/src/test/java/org/cardanofoundation/signify/e2e/WitnessTest.java index 10c0ad72..7860fd8a 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/WitnessTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/WitnessTest.java @@ -5,7 +5,6 @@ import org.cardanofoundation.signify.app.aiding.CreateIdentifierArgs; import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.aiding.RotateIdentifierArgs; -import org.cardanofoundation.signify.cesr.Salter; import org.cardanofoundation.signify.generated.keria.model.HabState; import org.cardanofoundation.signify.generated.keria.model.Tier; import org.junit.jupiter.api.Test; diff --git a/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java b/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java index d6f2a416..9ea3f43e 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java @@ -9,7 +9,6 @@ import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.aiding.RotateIdentifierArgs; import org.cardanofoundation.signify.app.clienting.SignifyClient; -import org.cardanofoundation.signify.app.coring.Operation; import org.cardanofoundation.signify.app.credentialing.credentials.CredentialData; import org.cardanofoundation.signify.app.credentialing.credentials.IssueCredentialResult; import org.cardanofoundation.signify.app.credentialing.ipex.IpexAdmitArgs; @@ -32,16 +31,18 @@ import org.cardanofoundation.signify.generated.keria.model.AidRecord; import org.cardanofoundation.signify.generated.keria.model.Credential; +import org.cardanofoundation.signify.generated.keria.model.CredentialOperation; import org.cardanofoundation.signify.generated.keria.model.Exn; import org.cardanofoundation.signify.generated.keria.model.ExnMultisig; import org.cardanofoundation.signify.generated.keria.model.GroupMember; import org.cardanofoundation.signify.generated.keria.model.HabState; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; +import org.cardanofoundation.signify.generated.keria.model.Operation; @SuppressWarnings("unchecked") public class MultisigUtils { - public static Object acceptMultisigIncept(SignifyClient client2, AcceptMultisigInceptArgs args) throws IOException, InterruptedException, DigestException, LibsodiumException, ExecutionException { + public static Operation acceptMultisigIncept(SignifyClient client2, AcceptMultisigInceptArgs args) throws IOException, InterruptedException, DigestException, LibsodiumException, ExecutionException { final HabState memberHab = client2.identifiers().get(args.getLocalMemberName()) .orElseThrow(() -> new IllegalArgumentException("Identifier not found: " + args.getLocalMemberName())); @@ -73,7 +74,7 @@ public static Object acceptMultisigIncept(SignifyClient client2, AcceptMultisigI createIdentifierArgs.setDelpre(icp.get("di") != null ? icp.get("di").toString() : null); EventResult icpResult2 = client2.identifiers().create(args.getGroupName(), createIdentifierArgs); - Object op2 = icpResult2.op(); + Operation op2 = icpResult2.op(); Serder serder = icpResult2.serder(); List sigs = icpResult2.sigs(); List sigers = sigs.stream().map(Siger::new).toList(); @@ -97,7 +98,7 @@ public static Object acceptMultisigIncept(SignifyClient client2, AcceptMultisigI return op2; } - public static Object interactMultisig(SignifyClient client, String groupName, HabState aid, + public static Operation interactMultisig(SignifyClient client, String groupName, HabState aid, List otherMemberAIDs, Object data, List states, @@ -142,7 +143,7 @@ public static Object interactMultisig(SignifyClient client, String groupName, Ha return interactResult.op(); } - public static Object rotateMultisig(SignifyClient client, String groupName, HabState aid, + public static Operation rotateMultisig(SignifyClient client, String groupName, HabState aid, List otherMemberAIDs, RotateIdentifierArgs kargs, String route, @@ -194,7 +195,7 @@ public static Object rotateMultisig(SignifyClient client, String groupName, HabS return interactResult.op(); } - public static List addEndRoleMultisig(SignifyClient client, String groupName, HabState aid, + public static List addEndRoleMultisig(SignifyClient client, String groupName, HabState aid, List otherMemberAIDs, HabState multisigAID, String timestamp, boolean isInitiator) throws Exception { @@ -202,7 +203,7 @@ public static List addEndRoleMultisig(SignifyClient client, String group TestUtils.waitAndMarkNotification(client, "/multisig/rpy"); } - List opList = new ArrayList<>(); + List opList = new ArrayList<>(); GroupMember members = client.identifiers().members(groupName); for (AidRecord signing : members.getSigning()) { @@ -248,7 +249,7 @@ public static List addEndRoleMultisig(SignifyClient client, String group return opList; } - public static List addEndRoleMultisigs(SignifyClient client, String groupName, HabState aid, + public static List addEndRoleMultisigs(SignifyClient client, String groupName, HabState aid, List otherMemberAIDs, HabState multisigAID, String timestamp, boolean isInitiator) throws Exception { @@ -256,7 +257,7 @@ public static List addEndRoleMultisigs(SignifyClient client, String grou TestUtils.waitAndMarkNotification(client, "/multisig/rpy"); } - List opList = new ArrayList<>(); + List opList = new ArrayList<>(); GroupMember members = client.identifiers().members(groupName); String eid = members.getSigning().getFirst().getEnds().getAgent().keySet().iterator().next(); @@ -361,7 +362,7 @@ public static void admitMultisig( ); } - public static Object createAIDMultisig( + public static Operation createAIDMultisig( SignifyClient client, HabState aid, List otherMembersAIDs, @@ -374,7 +375,7 @@ public static Object createAIDMultisig( } EventResult icpResult = client.identifiers().create(groupName, kargs); - Object op = icpResult.op(); + Operation op = icpResult.op(); Serder serder = icpResult.serder(); List sigs = icpResult.sigs(); @@ -413,7 +414,7 @@ public static Object createAIDMultisig( return op; } - public static Object createRegistryMultisig( + public static Operation createRegistryMultisig( SignifyClient client, HabState aid, List otherMembersAIDs, @@ -434,7 +435,7 @@ public static Object createRegistryMultisig( .nonce(nonce) .build(); RegistryResult vcpResult = client.registries().create(createRegistryArgs); - Object op = vcpResult.op(); + Operation op = vcpResult.op(); Serder serder = vcpResult.getRegser(); Serder anc = vcpResult.getSerder(); @@ -466,7 +467,7 @@ public static Object createRegistryMultisig( return op; } - public static Object createRegistryMultisig( + public static Operation createRegistryMultisig( SignifyClient client, HabState aid, List otherMembersAIDs, @@ -478,7 +479,7 @@ public static Object createRegistryMultisig( return createRegistryMultisig(client, aid, otherMembersAIDs, multisigAID, registryName, nonce, "registry", isInitiator); } - public static Object createMultisig( + public static Operation createMultisig( SignifyClient client, HabState aid, List otherMembersAIDs, @@ -498,7 +499,7 @@ public static Object createMultisig( .nonce(nonce) .build(); RegistryResult vcpResult = client.registries().create(createRegistryArgs); - Object op = vcpResult.op(); + Operation op = vcpResult.op(); Serder serder = vcpResult.getRegser(); Serder anc = vcpResult.getSerder(); @@ -531,7 +532,7 @@ public static Object createMultisig( - public static Object delegateMultisig( + public static Operation delegateMultisig( SignifyClient client, HabState aid, List otherMembersAIDs, @@ -549,7 +550,7 @@ public static Object delegateMultisig( } EventResult delResult = client.delegations().approve(multisigAID.getName(), anchor); - Object appOp = delResult.op(); + Operation appOp = delResult.op(); System.out.println("Delegator " + aid.getName() + "(" + aid.getPrefix() + ") approved delegation for " + multisigAID.getName() + " with anchor " + anchor); @@ -656,7 +657,7 @@ public static void grantMultisig( ); } - public static Object issueCredentialMultisig( + public static CredentialOperation issueCredentialMultisig( SignifyClient client, HabState aid, List otherMembersAIDs, @@ -669,7 +670,7 @@ public static Object issueCredentialMultisig( } IssueCredentialResult credResult = client.credentials().issue(multisigAIDName, kargsIss); - Operation op = credResult.getOp(); + CredentialOperation op = credResult.getOp(); HabState multisigAID = client.identifiers().get(multisigAIDName) .orElseThrow(() -> new IllegalArgumentException("Identifier not found: " + multisigAIDName)); @@ -703,7 +704,7 @@ public static Object issueCredentialMultisig( return op; } - public static Object startMultisigIncept( + public static Operation startMultisigIncept( SignifyClient client, StartMultisigInceptArgs args ) throws IOException, InterruptedException, DigestException, LibsodiumException, ExecutionException { @@ -728,7 +729,7 @@ public static Object startMultisigIncept( createIdentifierArgs.setRstates(participantStates); EventResult icpResult1 = client.identifiers().create(args.getGroupName(), createIdentifierArgs); - Object op1 = icpResult1.op(); + Operation op1 = icpResult1.op(); Serder serder = icpResult1.serder(); List sigs = icpResult1.sigs(); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java b/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java index ee992876..56066d9f 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java @@ -1,6 +1,5 @@ package org.cardanofoundation.signify.e2e.utils; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.AllArgsConstructor; @@ -8,13 +7,12 @@ import lombok.NoArgsConstructor; import lombok.Setter; import lombok.extern.slf4j.Slf4j; -import org.cardanofoundation.signify.generated.keria.model.Contact; + import org.cardanofoundation.signify.app.Notifying; import org.cardanofoundation.signify.app.aiding.CreateIdentifierArgs; import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.aiding.IdentifierListResponse; import org.cardanofoundation.signify.app.clienting.SignifyClient; -import org.cardanofoundation.signify.app.coring.Operation; import org.cardanofoundation.signify.app.credentialing.credentials.CredentialData; import org.cardanofoundation.signify.app.credentialing.credentials.CredentialFilter; import org.cardanofoundation.signify.app.credentialing.credentials.IssueCredentialResult; @@ -31,17 +29,12 @@ import java.util.function.Supplier; import java.util.stream.Collectors; -import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; -import org.cardanofoundation.signify.generated.keria.model.OOBI; -import org.cardanofoundation.signify.generated.keria.model.Tier; - import static org.cardanofoundation.signify.app.coring.Coring.randomPasscode; import static org.cardanofoundation.signify.e2e.utils.Retry.retry; import static org.junit.jupiter.api.Assertions.*; @Slf4j public class TestUtils { - private static final ObjectMapper objectMapper = new ObjectMapper(); private static List filteredNotes; public static class Aid { @@ -91,7 +84,7 @@ public static void admitSinglesig(SignifyClient client, String aidName, HabState public static void assertOperations(List clients) throws IOException, InterruptedException, LibsodiumException { for (SignifyClient client : clients) { - List> operations = client.operations().list(null); + List operations = client.operations().list(); assertEquals(0, operations.size()); } } @@ -241,7 +234,6 @@ public static SignifyClient getOrCreateClient(String bran) throws Exception { public static String[] getOrCreateIdentifier(SignifyClient client, String name, CreateIdentifierArgs kargs) throws Exception { Object id = null; String eid; - Object op, ops; Optional optionalIdentifier = client.identifiers().get(name); if (optionalIdentifier.isPresent()) { @@ -255,19 +247,13 @@ public static String[] getOrCreateIdentifier(SignifyClient client, String name, kargs.setWits(env.witnessIds()); } EventResult result = client.identifiers().create(name, kargs); - op = result.op(); - op = operationToObject(waitOperation(client, op)); - if (op instanceof String) { - try { - HashMap map = objectMapper.readValue( - (String) op, - new TypeReference>() {} - ); - Map idMap = castObjectToLinkedHashMap(map.get("response")); - id = idMap.get("i"); - } catch (Exception ex) { - ex.printStackTrace(); - } + Operation opResult = waitOperation(client, result.op(), Operation.class); + if (opResult instanceof CompletedWitnessOperation completed) { + id = completed.getResponse().getI(); + } else if (opResult instanceof CompletedDelegationOperation completed) { + id = completed.getResponse().getI(); + } else if (opResult instanceof CompletedDoneOperation completed) { + id = completed.getResponse().getI(); } if (client.getAgent() != null && client.getAgent().getPre() != null) { eid = client.getAgent().getPre(); @@ -276,8 +262,7 @@ public static String[] getOrCreateIdentifier(SignifyClient client, String name, } if (!hasEndRole(client, name, "agent", eid)) { EventResult results = client.identifiers().addEndRole(name, "agent", eid, null); - ops = results.op(); - ops = operationToObject(waitOperation(client, ops)); + waitOperation(client, results.op()); } } @@ -297,17 +282,16 @@ public static String getOrCreateContact(SignifyClient client, String name, Strin return contact.getId(); } } - Object op = client.oobis().resolve(oobi, name); + OOBIOperation op = client.oobis().resolve(oobi, name); - Operation opBody = waitOperation(client, op); - LinkedHashMap response = castObjectToLinkedHashMap(opBody.getResponse()); - - if (response.get("i") != null) { - return response.get("i").toString(); - } else if (response.get("i") == null) { - return getOrCreateContact(client, name, oobi); + OOBIOperation opBody = waitOperation(client, op, OOBIOperation.class); + if (opBody instanceof CompletedOOBIOperation completed) { + String i = completed.getResponse().getI(); + if (i != null) { + return i; + } } - return null; + return getOrCreateContact(client, name, oobi); } public static Credential getOrIssueCredential( @@ -404,11 +388,22 @@ public static void warnNotifications(List clients) throws Excepti assertTrue(count > 0); } - public static void deleteOperations(SignifyClient client, Operation op) throws IOException, InterruptedException, LibsodiumException { - if (op.getMetadata() != null && op.getMetadata().getDepends() != null) { - deleteOperations(client, op.getMetadata().getDepends()); + @SuppressWarnings("unchecked") + public static void deleteOperations(SignifyClient client, String operationName) throws IOException, InterruptedException, LibsodiumException { + Map opMap = client.operations().get(operationName, Map.class).orElse(null); + if (opMap != null) { + Object metadata = opMap.get("metadata"); + if (metadata instanceof Map metaMap) { + Object depends = metaMap.get("depends"); + if (depends instanceof Map depMap) { + String depName = (String) depMap.get("name"); + if (depName != null) { + deleteOperations(client, depName); + } + } + } } - client.operations().delete(op.getName()); + client.operations().delete(operationName); } public static void deleteOperation(SignifyClient client, String name) throws IOException, InterruptedException, LibsodiumException { @@ -439,7 +434,7 @@ public static void markNotification(SignifyClient client, Notification note) thr } public static void resolveOobi(SignifyClient client, String oobi, String alias) throws IOException, InterruptedException, LibsodiumException { - Object op = client.oobis().resolve(oobi, alias); + OOBIOperation op = client.oobis().resolve(oobi, alias); waitOperation(client, op); } @@ -511,25 +506,25 @@ public static List waitForNotifications(SignifyClient client, Stri }, retryOptions); } - public static Operation waitOperation( + public static Operation waitOperation( SignifyClient client, - Object op + Operation op ) throws IOException, InterruptedException, LibsodiumException { - Operation operation = Operation.fromObject(op); - operation = client.operations().wait(operation); - deleteOperations(client, operation); - return operation; + String name = op.getName(); + Operation result = client.operations().wait(name); + deleteOperations(client, name); + return result; } - public static Object operationToObject(Operation operation) throws JsonProcessingException { - Map opMap = new LinkedHashMap<>(); - opMap.put("name", operation.getName()); - opMap.put("metadata", operation.getMetadata() != null ? operation.getMetadata().getProperties() : null); - opMap.put("done", operation.isDone()); - opMap.put("error", operation.getError()); - opMap.put("response", operation.getResponse()); - - return objectMapper.writeValueAsString(opMap); + public static T waitOperation( + SignifyClient client, + Operation op, + Class type + ) throws IOException, InterruptedException, LibsodiumException { + String name = op.getName(); + T result = client.operations().wait(name, type); + deleteOperations(client, name); + return result; } public static Integer parseInteger(String s) { From 5cb9cc4d604359c69e0db5241c17d0fd287a1700 Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Fri, 3 Apr 2026 14:28:32 +0700 Subject: [PATCH 02/20] fix CompletedDelegationOperationResponseDeserializer --- ...etedDelegationOperationResponseDeserializer.java | 13 ++++--------- .../signify/app/config/GeneratedModelConfig.java | 3 +-- .../signify/app/coring/OperationDeserializer.java | 6 +++++- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/cardanofoundation/signify/app/config/CompletedDelegationOperationResponseDeserializer.java b/src/main/java/org/cardanofoundation/signify/app/config/CompletedDelegationOperationResponseDeserializer.java index af5e49a0..b8d42be8 100644 --- a/src/main/java/org/cardanofoundation/signify/app/config/CompletedDelegationOperationResponseDeserializer.java +++ b/src/main/java/org/cardanofoundation/signify/app/config/CompletedDelegationOperationResponseDeserializer.java @@ -1,7 +1,6 @@ package org.cardanofoundation.signify.app.config; import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonDeserializer; @@ -15,9 +14,9 @@ import java.io.IOException; /** - * Deserializes {@link CompletedDelegationOperationResponse} handling both object and string forms. - * KERIA returns a full key-event object for delegation inception but a plain SAID string - * for delegation approval (IXN) operations. + * Deserializes {@link CompletedDelegationOperationResponse} from a JSON object. + * String responses (delegation approval / IXN) are handled upstream by OperationDeserializer, + * which redirects them to {@code CompletedDelegatorOperation}. */ class CompletedDelegationOperationResponseDeserializer extends JsonDeserializer { @@ -38,11 +37,7 @@ class CompletedDelegationOperationResponseDeserializer extends JsonDeserializer< @Override public CompletedDelegationOperationResponse deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - if (p.currentToken() == JsonToken.VALUE_STRING) { - CompletedDelegationOperationResponse response = new CompletedDelegationOperationResponse(); - response.setD(p.getText()); - return response; - } + // String responses are now handled by OperationDeserializer redirecting to CompletedDelegatorOperation // Use a mapper with nested custom deserializers but without ours to avoid infinite recursion JsonNode tree = p.getCodec().readTree(p); return FALLBACK_MAPPER.treeToValue(tree, CompletedDelegationOperationResponse.class); diff --git a/src/main/java/org/cardanofoundation/signify/app/config/GeneratedModelConfig.java b/src/main/java/org/cardanofoundation/signify/app/config/GeneratedModelConfig.java index 945c259e..ef421c1b 100644 --- a/src/main/java/org/cardanofoundation/signify/app/config/GeneratedModelConfig.java +++ b/src/main/java/org/cardanofoundation/signify/app/config/GeneratedModelConfig.java @@ -5,7 +5,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import org.cardanofoundation.signify.generated.keria.model.CredentialState; -import org.cardanofoundation.signify.generated.keria.model.CompletedDelegationOperationResponse; import org.cardanofoundation.signify.generated.keria.model.ICPV1Kt; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecordKt; import org.openapitools.jackson.nullable.JsonNullableModule; @@ -19,6 +18,7 @@ private GeneratedModelConfig() { public static void configure(ObjectMapper mapper) { mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); mapper.addMixIn(CredentialState.class, CredentialStateMixin.class); mapper.registerModule(new JsonNullableModule()); @@ -27,7 +27,6 @@ public static void configure(ObjectMapper mapper) { SimpleModule module = new SimpleModule("GeneratedModelModule"); module.addDeserializer(ICPV1Kt.class, new ICPV1KtDeserializer()); module.addDeserializer(KeyStateRecordKt.class, new KeyStateRecordKtDeserializer()); - module.addDeserializer(CompletedDelegationOperationResponse.class, new CompletedDelegationOperationResponseDeserializer()); mapper.registerModule(module); } } diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/OperationDeserializer.java b/src/main/java/org/cardanofoundation/signify/app/coring/OperationDeserializer.java index 4ec3fbfc..07919e2d 100644 --- a/src/main/java/org/cardanofoundation/signify/app/coring/OperationDeserializer.java +++ b/src/main/java/org/cardanofoundation/signify/app/coring/OperationDeserializer.java @@ -110,7 +110,11 @@ public Operation deserialize(JsonParser p, DeserializationContext ctxt) throws I // Determine state: response → completed, error → failed, otherwise → pending Class concreteType; if (node.has("response") && !node.get("response").isNull()) { - concreteType = opType.completed; + if (opType == OperationType.DELEGATION && node.get("response").isTextual()) { + concreteType = OperationType.DELEGATOR.completed; + } else { + concreteType = opType.completed; + } } else if (node.has("error") && !node.get("error").isNull()) { concreteType = opType.failed; } else { From 42c2f7f7f1f54a3183756ab25d1e822761d74efd Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Fri, 3 Apr 2026 16:16:29 +0700 Subject: [PATCH 03/20] improve general OP types, EventResult --- .../signify/app/Delegating.java | 7 +++--- .../signify/app/aiding/EventResult.java | 6 ++--- .../app/aiding/IdentifierController.java | 21 +++++++++------- .../signify/e2e/ChallengesTest.java | 9 +++---- .../signify/e2e/DelegationTest.java | 13 +++++----- .../signify/e2e/MultisigHolderTest.java | 3 +-- .../signify/e2e/MultisigJoinTest.java | 25 +++++++++---------- .../signify/e2e/MultisigTest.java | 7 +++--- .../signify/e2e/RandyTest.java | 15 ++++++----- .../signify/e2e/SaltyTests.java | 11 ++++---- .../signify/e2e/SinglesigDIPTest.java | 15 ++++++----- .../signify/e2e/SinglesigDRTTest.java | 17 ++++++------- .../signify/e2e/SinglesigIXNTest.java | 3 +-- .../signify/e2e/SinglesigROTTest.java | 3 +-- .../signify/e2e/WitnessTest.java | 15 ++++++----- .../signify/e2e/utils/MultisigUtils.java | 17 ++++++------- .../signify/e2e/utils/TestUtils.java | 9 +++---- 17 files changed, 93 insertions(+), 103 deletions(-) diff --git a/src/main/java/org/cardanofoundation/signify/app/Delegating.java b/src/main/java/org/cardanofoundation/signify/app/Delegating.java index 44167de6..dc526e14 100644 --- a/src/main/java/org/cardanofoundation/signify/app/Delegating.java +++ b/src/main/java/org/cardanofoundation/signify/app/Delegating.java @@ -5,6 +5,7 @@ import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.aiding.InteractionResponse; import org.cardanofoundation.signify.cesr.exceptions.LibsodiumException; +import org.cardanofoundation.signify.generated.keria.model.DelegationOperation; import java.io.IOException; import java.net.http.HttpResponse; @@ -30,7 +31,7 @@ public Delegations(SignifyClient client) { * @return The delegated approval result * @throws Exception if the fetch operation fails */ - public EventResult approve(String name, Object data) throws LibsodiumException, DigestException, IOException, InterruptedException { + public EventResult approve(String name, Object data) throws LibsodiumException, DigestException, IOException, InterruptedException { InteractionResponse interactionResponse = this.client .identifiers() .createInteract(name, data); @@ -40,10 +41,10 @@ public EventResult approve(String name, Object data) throws LibsodiumException, "POST", interactionResponse.jsondata() ); - return new EventResult(interactionResponse.serder(), interactionResponse.sigs(), res); + return new EventResult<>(interactionResponse.serder(), interactionResponse.sigs(), res, DelegationOperation.class); } - public EventResult approve(String name) throws LibsodiumException, DigestException, IOException, InterruptedException { + public EventResult approve(String name) throws LibsodiumException, DigestException, IOException, InterruptedException { return this.approve(name, null); } } diff --git a/src/main/java/org/cardanofoundation/signify/app/aiding/EventResult.java b/src/main/java/org/cardanofoundation/signify/app/aiding/EventResult.java index 94f9641d..6d20491c 100644 --- a/src/main/java/org/cardanofoundation/signify/app/aiding/EventResult.java +++ b/src/main/java/org/cardanofoundation/signify/app/aiding/EventResult.java @@ -8,9 +8,9 @@ import org.cardanofoundation.signify.cesr.util.Utils; import org.cardanofoundation.signify.generated.keria.model.Operation; -public record EventResult(Serder serder, List sigs, HttpResponse response) { +public record EventResult(Serder serder, List sigs, HttpResponse response, Class opType) { - public Operation op() throws IOException { - return Utils.fromJson(response.body(), Operation.class); + public T op() throws IOException { + return Utils.fromJson(response.body(), opType); } } \ No newline at end of file diff --git a/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java b/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java index f6063e1d..a3891004 100644 --- a/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java +++ b/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java @@ -27,10 +27,13 @@ import java.util.*; import java.util.concurrent.ExecutionException; import org.cardanofoundation.signify.generated.keria.model.EndrolesAidPostRequest; +import org.cardanofoundation.signify.generated.keria.model.DoneOperation; +import org.cardanofoundation.signify.generated.keria.model.EndRoleOperation; import org.cardanofoundation.signify.generated.keria.model.GroupMember; import org.cardanofoundation.signify.generated.keria.model.HabState; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecordKt; +import org.cardanofoundation.signify.generated.keria.model.Operation; import static org.cardanofoundation.signify.cesr.util.CoreUtil.Versionage; import static org.cardanofoundation.signify.core.Httping.parseRangeHeaders; @@ -129,7 +132,7 @@ public HabState update(String name, IdentifierInfo info) throws InterruptedExcep * @param kargs Optional parameters to create the identifier * @return An EventResult to the inception result */ - public EventResult create(String name, CreateIdentifierArgs kargs) throws InterruptedException, DigestException, IOException, LibsodiumException { + public EventResult create(String name, CreateIdentifierArgs kargs) throws InterruptedException, DigestException, IOException, LibsodiumException { // Assuming kargs is an instance of a class with appropriate getters Algos algo = kargs.getAlgo() == null ? Algos.salty : kargs.getAlgo(); @@ -275,7 +278,7 @@ public EventResult create(String name, CreateIdentifierArgs kargs) throws Interr this.client.setPidx(this.client.getPidx() + 1); HttpResponse response = this.client.fetch("/identifiers", "POST", jsondata); - return new EventResult(serder, sigs, response); + return new EventResult<>(serder, sigs, response, Operation.class); } @@ -290,7 +293,7 @@ public EventResult create(String name, CreateIdentifierArgs kargs) throws Interr * @return An EventResult to the result of the authorization * @throws LibsodiumException if there is an error in the cryptographic operations */ - public EventResult addEndRole(String name, String role, String eid, String stamp) throws InterruptedException, DigestException, IOException, LibsodiumException { + public EventResult addEndRole(String name, String role, String eid, String stamp) throws InterruptedException, DigestException, IOException, LibsodiumException { HabState hab = this.get(name) .orElseThrow(() -> new IllegalArgumentException("Identifier not found: " + name)); String pre = hab.getPrefix(); @@ -310,7 +313,7 @@ public EventResult addEndRole(String name, String role, String eid, String stamp "POST", endrolesAidPostRequest ); - return new EventResult(rpy, sigs, res); + return new EventResult<>(rpy, sigs, res, EndRoleOperation.class); } /** @@ -335,14 +338,14 @@ private Serder makeEndRole(String pre, String role, String eid, String stamp) th return Eventing.reply(route, data, stamp, null, Serials.JSON); } - public EventResult interact(String name, Object data) throws InterruptedException, DigestException, IOException, LibsodiumException { + public EventResult interact(String name, Object data) throws InterruptedException, DigestException, IOException, LibsodiumException { InteractionResponse interactionResponse = this.createInteract(name, data); HttpResponse response = this.client.fetch( "/identifiers/" + name + "/events", "POST", interactionResponse.jsondata() ); - return new EventResult(interactionResponse.serder(), interactionResponse.sigs(), response); + return new EventResult<>(interactionResponse.serder(), interactionResponse.sigs(), response, DoneOperation.class); } public InteractionResponse createInteract(String name, Object data) throws InterruptedException, DigestException, IOException, LibsodiumException { @@ -376,11 +379,11 @@ public InteractionResponse createInteract(String name, Object data) throws Inter return new InteractionResponse(serder, sigs.signatures(), jsondata); } - public EventResult rotate(String name) throws ExecutionException, InterruptedException, DigestException, IOException, LibsodiumException { + public EventResult rotate(String name) throws ExecutionException, InterruptedException, DigestException, IOException, LibsodiumException { return this.rotate(name, RotateIdentifierArgs.builder().build()); } - public EventResult rotate(String name, RotateIdentifierArgs kargs) throws InterruptedException, DigestException, IOException, LibsodiumException { + public EventResult rotate(String name, RotateIdentifierArgs kargs) throws InterruptedException, DigestException, IOException, LibsodiumException { boolean transferable = kargs.getTransferable() != null ? kargs.getTransferable() : true; String ncode = kargs.getNcode() != null ? kargs.getNcode() : MatterCodex.Ed25519_Seed.getValue(); int ncount = kargs.getNcount() != null ? kargs.getNcount() : 1; @@ -464,7 +467,7 @@ public EventResult rotate(String name, RotateIdentifierArgs kargs) throws Interr jsondata ); - return new EventResult(serder, sigs, res); + return new EventResult<>(serder, sigs, res, DoneOperation.class); } /** diff --git a/src/test/java/org/cardanofoundation/signify/e2e/ChallengesTest.java b/src/test/java/org/cardanofoundation/signify/e2e/ChallengesTest.java index f866d2d2..37cd15ed 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/ChallengesTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/ChallengesTest.java @@ -2,7 +2,6 @@ import org.cardanofoundation.signify.app.Contacting; import org.cardanofoundation.signify.app.aiding.CreateIdentifierArgs; -import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.app.coring.Coring; import org.cardanofoundation.signify.generated.keria.model.*; @@ -62,12 +61,12 @@ void ChallengeTest() throws Exception { "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX" )); - EventResult icpResult1 = client1.identifiers().create("alice", kargs1); + var icpResult1 = client1.identifiers().create("alice", kargs1); Operation op1 = waitOperation(client1, icpResult1.op()); if (op1 instanceof CompletedWitnessOperation completed) { aid1Prefix = completed.getResponse().getI(); } - EventResult rpyResult1 = client1.identifiers().addEndRole( + var rpyResult1 = client1.identifiers().addEndRole( "alice", "agent", client1.getAgent().getPre(), @@ -82,13 +81,13 @@ void ChallengeTest() throws Exception { "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX" )); - EventResult icpResult2 = client2.identifiers().create("bob", kargs2); + var icpResult2 = client2.identifiers().create("bob", kargs2); Operation op2 = waitOperation(client2, icpResult2.op()); if (op2 instanceof CompletedWitnessOperation completed) { aid2Prefix = completed.getResponse().getI(); } - EventResult rpyResult2 = client2.identifiers().addEndRole( + var rpyResult2 = client2.identifiers().addEndRole( "bob", "agent", client2.getAgent().getPre(), diff --git a/src/test/java/org/cardanofoundation/signify/e2e/DelegationTest.java b/src/test/java/org/cardanofoundation/signify/e2e/DelegationTest.java index e294571e..ad12c9b2 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/DelegationTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/DelegationTest.java @@ -2,7 +2,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.cardanofoundation.signify.app.aiding.CreateIdentifierArgs; -import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.app.coring.Coring; import org.cardanofoundation.signify.e2e.utils.TestSteps; @@ -62,11 +61,11 @@ void delegationTest() throws Exception { "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX")); kargs.setWits(wits); - EventResult icpResult1 = client1.identifiers().create("delegator", kargs); + var icpResult1 = client1.identifiers().create("delegator", kargs); waitOperation(client1, icpResult1.op()); HabState ator = client1.identifiers().get("delegator").get(); - EventResult rpyResult1 = client1.identifiers().addEndRole( + var rpyResult1 = client1.identifiers().addEndRole( "delegator", "agent", client1.getAgent().getPre(), @@ -83,7 +82,7 @@ void delegationTest() throws Exception { // Client 2 creates delegate AID CreateIdentifierArgs delpre = new CreateIdentifierArgs(); delpre.setDelpre(ator.getPrefix()); - EventResult icpResult2 = client2.identifiers().create("delegate", delpre); + var icpResult2 = client2.identifiers().create("delegate", delpre); Operation op2 = icpResult2.op(); opResponseName = op2.getName(); String delegatePrefix = opResponseName.split("\\.")[1]; @@ -97,8 +96,8 @@ void delegationTest() throws Exception { anchor.put("d", delegatePrefix); testSteps.step("delegator approves delegation", () -> { - EventResult result = retry(unchecked(() -> { - EventResult apprDelRes = client1.delegations().approve("delegator", anchor); + var result = retry(unchecked(() -> { + var apprDelRes = client1.delegations().approve("delegator", anchor); waitOperation(client1, apprDelRes.op()); return apprDelRes; })); @@ -118,7 +117,7 @@ void delegationTest() throws Exception { List clientList = new ArrayList<>(Arrays.asList(client1, client2)); assertOperations(clientList); - EventResult rpyResult2 = client2.identifiers().addEndRole( + var rpyResult2 = client2.identifiers().addEndRole( "delegate", "agent", client2.getAgent().getPre(), diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigHolderTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigHolderTest.java index 906dac11..a0b08cbd 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigHolderTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigHolderTest.java @@ -1,7 +1,6 @@ package org.cardanofoundation.signify.e2e; import org.cardanofoundation.signify.app.Exchanging; -import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.aiding.IdentifierListResponse; import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.app.credentialing.credentials.CredentialData; @@ -185,7 +184,7 @@ void multisigHolderTest() throws Exception { String timestamp = createTimestamp(); - EventResult endRoleRes = client1.identifiers().addEndRole("holder", "agent", eid1, timestamp); + var endRoleRes = client1.identifiers().addEndRole("holder", "agent", eid1, timestamp); op1 = endRoleRes.op(); Serder rpy = endRoleRes.serder(); List sigs = endRoleRes.sigs(); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigJoinTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigJoinTest.java index bdc69f8d..31e0566f 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigJoinTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigJoinTest.java @@ -1,7 +1,6 @@ package org.cardanofoundation.signify.e2e; import org.cardanofoundation.signify.app.aiding.CreateIdentifierArgs; -import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.aiding.RotateIdentifierArgs; import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.cesr.Keeping; @@ -86,7 +85,7 @@ public void multisigJoinTest() throws Exception { kargs.setStates(states); kargs.setRstates(states); - EventResult icpResult = client1.identifiers().create(nameMultisig, kargs); + var icpResult = client1.identifiers().create(nameMultisig, kargs); Operation createMultisig1 = icpResult.op(); Serder serder = icpResult.serder(); @@ -134,7 +133,7 @@ public void multisigJoinTest() throws Exception { iargs2.setStates(states); iargs2.setRstates(states); - EventResult icpResult2 = client2.identifiers().create(nameMultisig, iargs2); + var icpResult2 = client2.identifiers().create(nameMultisig, iargs2); Operation createMultisig2 = icpResult2.op(); @@ -157,8 +156,8 @@ public void multisigJoinTest() throws Exception { String eid1 = membersAgent1.getSigning().getFirst().getEnds().getAgent().keySet().iterator().next(); String eid2 = membersAgent2.getSigning().getFirst().getEnds().getAgent().keySet().iterator().next(); - EventResult endRoleOperation1 = client1.identifiers().addEndRole(nameMultisig, "agent", eid1, null); - EventResult endRoleOperation2 = client2.identifiers().addEndRole(nameMultisig, "agent", eid2, null); + var endRoleOperation1 = client1.identifiers().addEndRole(nameMultisig, "agent", eid1, null); + var endRoleOperation2 = client2.identifiers().addEndRole(nameMultisig, "agent", eid2, null); oobiGetMultisig = client1.oobis().get(nameMultisig, "agent").get(); @@ -192,8 +191,8 @@ public void multisigJoinTestAddMember3() throws Exception { new ResolveOobisArgs(client3, oobiMultisig, nameMultisig) ); - EventResult rotateResult1 = client1.identifiers().rotate(nameMember1); - EventResult rotateResult2 = client2.identifiers().rotate(nameMember2); + var rotateResult1 = client1.identifiers().rotate(nameMember1); + var rotateResult2 = client2.identifiers().rotate(nameMember2); waitOperationAsync( new WaitOperationArgs(client1, rotateResult1.op()), @@ -230,7 +229,7 @@ public void multisigJoinTestAddMember3() throws Exception { List rstates = new ArrayList<>(states); rstates.add(aid3State); - EventResult rotateOperation1 = client1.identifiers().rotate(nameMultisig, RotateIdentifierArgs.builder() + var rotateOperation1 = client1.identifiers().rotate(nameMultisig, RotateIdentifierArgs.builder() .states(states) .rstates(rstates) .build()); @@ -291,9 +290,9 @@ public void multisigJoinTestAddMember3() throws Exception { @Test @Order(3) public void signingKeysAndJoinTest() throws Exception { - EventResult rotateResult1 = client1.identifiers().rotate(nameMember1); - EventResult rotateResult2 = client2.identifiers().rotate(nameMember2); - EventResult rotateResult3 = client3.identifiers().rotate(nameMember3); + var rotateResult1 = client1.identifiers().rotate(nameMember1); + var rotateResult2 = client2.identifiers().rotate(nameMember2); + var rotateResult3 = client3.identifiers().rotate(nameMember3); waitOperationAsync( new WaitOperationArgs(client1, rotateResult1.op()), @@ -330,7 +329,7 @@ public void signingKeysAndJoinTest() throws Exception { List states = Arrays.asList(aid1State, aid2State, aid3State); - EventResult rotateOperation1 = client1.identifiers().rotate(nameMultisig, RotateIdentifierArgs.builder() + var rotateOperation1 = client1.identifiers().rotate(nameMultisig, RotateIdentifierArgs.builder() .states(states) .rstates(states) .build()); @@ -410,7 +409,7 @@ public void signingKeysAndJoinTest() throws Exception { GroupMember members = client3.identifiers().members(nameMultisig); String eid = members.getSigning().get(2).getEnds().getAgent().keySet().iterator().next(); - EventResult endRoleOperation = client3.identifiers().addEndRole(nameMultisig, "agent", eid, null); + var endRoleOperation = client3.identifiers().addEndRole(nameMultisig, "agent", eid, null); Operation endRoleResult = waitOperation(client3, endRoleOperation.op()); assertNotNull(endRoleResult); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java index 0ba7c346..6d559825 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java @@ -2,7 +2,6 @@ import org.cardanofoundation.signify.app.Exchanging; import org.cardanofoundation.signify.app.aiding.CreateIdentifierArgs; -import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.aiding.IdentifierListResponse; import org.cardanofoundation.signify.app.aiding.RotateIdentifierArgs; import org.cardanofoundation.signify.app.clienting.SignifyClient; @@ -369,19 +368,19 @@ public void multisig() throws Exception { // Members agree out of band to rotate keys System.out.println("Members agree out of band to rotate keys"); - EventResult icpResult1 = client1.identifiers().rotate("member1"); + var icpResult1 = client1.identifiers().rotate("member1"); op1 = icpResult1.op(); op1 = waitOperation(client1, op1); aid1 = client1.identifiers().get("member1").get(); System.out.println("Member1 rotated keys"); - EventResult icpResult2 = client2.identifiers().rotate("member2"); + var icpResult2 = client2.identifiers().rotate("member2"); op2 = icpResult2.op(); op2 = waitOperation(client2, op2); aid2 = client2.identifiers().get("member2").get(); System.out.println("Member2 rotated keys"); - EventResult icpResult3 = client3.identifiers().rotate("member3"); + var icpResult3 = client3.identifiers().rotate("member3"); op3 = icpResult3.op(); op3 = waitOperation(client3, op3); aid3 = client3.identifiers().get("member3").get(); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/RandyTest.java b/src/test/java/org/cardanofoundation/signify/e2e/RandyTest.java index 0edf1d72..f2c6a3b8 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/RandyTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/RandyTest.java @@ -2,7 +2,6 @@ import lombok.extern.slf4j.Slf4j; import org.cardanofoundation.signify.app.aiding.CreateIdentifierArgs; -import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.aiding.IdentifierListResponse; import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.app.coring.Coring; @@ -44,7 +43,7 @@ void randyTest() throws Exception { CreateIdentifierArgs kargs = new CreateIdentifierArgs(); kargs.setAlgo(Manager.Algos.randy); - EventResult icpResult = client1.identifiers().create("aid1", kargs); + var icpResult = client1.identifiers().create("aid1", kargs); waitOperation(client1, icpResult.op()); Serder icp = icpResult.serder(); @@ -64,9 +63,9 @@ void randyTest() throws Exception { assertEquals("aid1", opResponseName); assertEquals(icp.getPre(), opResponsePrefix); - icpResult = client1.identifiers().interact("aid1", icp.getPre()); - waitOperation(client1, icpResult.op()); - Serder ixn = icpResult.serder(); + var ixnResult = client1.identifiers().interact("aid1", icp.getPre()); + waitOperation(client1, ixnResult.op()); + Serder ixn = ixnResult.serder(); assertEquals("1", ixn.getKed().get("s")); assertEquals(List.of(icp.getPre()), ixn.getKed().get("a")); @@ -82,10 +81,10 @@ void randyTest() throws Exception { List logList = events.get(opResponsePrefix); assertEquals(2, logList.size()); - icpResult = client1.identifiers().rotate("aid1"); - waitOperation(client1, icpResult.op()); + var rotResult = client1.identifiers().rotate("aid1"); + waitOperation(client1, rotResult.op()); - Serder rot = icpResult.serder(); + Serder rot = rotResult.serder(); assertEquals("2", rot.getKed().get("s")); assertEquals(1, rot.getVerfers().size()); assertEquals(1, rot.getDigers().size()); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/SaltyTests.java b/src/test/java/org/cardanofoundation/signify/e2e/SaltyTests.java index 7858f5f3..31410143 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/SaltyTests.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/SaltyTests.java @@ -1,7 +1,6 @@ package org.cardanofoundation.signify.e2e; import org.cardanofoundation.signify.app.aiding.CreateIdentifierArgs; -import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.aiding.IdentifierInfo; import org.cardanofoundation.signify.app.aiding.IdentifierListResponse; import org.cardanofoundation.signify.app.clienting.SignifyClient; @@ -42,7 +41,7 @@ void saltyTest() throws Exception { CreateIdentifierArgs bran = new CreateIdentifierArgs(); bran.setBran("0123456789abcdefghijk"); - EventResult icpResult = client.identifiers().create("aid1", bran); + var icpResult = client.identifiers().create("aid1", bran); waitOperation(client, icpResult.op()); Serder icp = icpResult.serder(); @@ -76,7 +75,7 @@ void saltyTest() throws Exception { params.setNsith("2"); params.setBran("0123456789lmnopqrstuv"); - EventResult icpResult1 = client.identifiers().create("aid2", params); + var icpResult1 = client.identifiers().create("aid2", params); waitOperation(client, icpResult1.op()); Serder icp2 = icpResult1.serder(); @@ -107,7 +106,7 @@ void saltyTest() throws Exception { CreateIdentifierArgs kargs = new CreateIdentifierArgs(); kargs.setAlgo(Manager.Algos.salty); - EventResult icpResult2 = client.identifiers().create("aid3", kargs); + var icpResult2 = client.identifiers().create("aid3", kargs); waitOperation(client, icpResult2.op()); IdentifierListResponse aidsJson2 = client.identifiers().list(0, 24); @@ -132,7 +131,7 @@ void saltyTest() throws Exception { Assertions.assertEquals("aid3", aid6.getName()); // Rotate - EventResult icpResultRotate = client.identifiers().rotate("aid1"); + var icpResultRotate = client.identifiers().rotate("aid1"); waitOperation(client, icpResultRotate.op()); Serder rotRotate = icpResultRotate.serder(); @@ -144,7 +143,7 @@ void saltyTest() throws Exception { Assertions.assertEquals("EJMovBlrBuD6BVeUsGSxLjczbLEbZU9YnTSud9K4nVzk", rotRotate.getDigers().getFirst().getQb64()); // Interact - EventResult icpResultInteract = client.identifiers().interact("aid1", List.of(icp.getPre())); + var icpResultInteract = client.identifiers().interact("aid1", List.of(icp.getPre())); waitOperation(client, icpResultInteract.op()); Serder ixn = icpResultInteract.serder(); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDIPTest.java b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDIPTest.java index 77c6355d..6ed40121 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDIPTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDIPTest.java @@ -2,7 +2,6 @@ import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.app.aiding.CreateIdentifierArgs; -import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.cesr.exceptions.LibsodiumException; import org.cardanofoundation.signify.e2e.utils.ResolveEnv; import org.cardanofoundation.signify.e2e.utils.TestUtils; @@ -50,7 +49,7 @@ public void singlesig_dip() throws Exception { CreateIdentifierArgs kargs = new CreateIdentifierArgs(); kargs.setDelpre(name1_id); - EventResult result = client2.identifiers().create("delegate1", kargs); + var result = client2.identifiers().create("delegate1", kargs); Operation op = result.op(); HabState delegate1 = client2.identifiers().get("delegate1").get(); opResponseName = op.getName(); @@ -62,8 +61,8 @@ public void singlesig_dip() throws Exception { seal.put("s", "0"); seal.put("d", delegate1.getPrefix()); - result = client1.identifiers().interact("name1", seal); - Operation op1 = result.op(); + var interactResult1 = client1.identifiers().interact("name1", seal); + Operation op1 = interactResult1.op(); // Refresh keystate to sn=1 QueryOperation op2 = client2.keyStates().query(name1_id, "1", null); @@ -85,8 +84,8 @@ public void singlesig_dip() throws Exception { kargs.setDelpre(name1_id); kargs.setToad(env.witnessIds().size()); kargs.setWits(env.witnessIds()); - result = client2.identifiers().create("delegate2", kargs); - op = result.op(); + var result2 = client2.identifiers().create("delegate2", kargs); + op = result2.op(); opResponseName = op.getName(); HabState delegate2 = client2.identifiers().get("delegate2").get(); @@ -98,8 +97,8 @@ public void singlesig_dip() throws Exception { seal.put("s", "0"); seal.put("d", delegate2.getPrefix()); - result = client1.identifiers().interact("name1", seal); - op1 = result.op(); + var interactResult2 = client1.identifiers().interact("name1", seal); + op1 = interactResult2.op(); // refresh keystate to seal event op2 = client2.keyStates().query(name1_id, null, seal); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDRTTest.java b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDRTTest.java index 33628539..eec2636b 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDRTTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDRTTest.java @@ -2,7 +2,6 @@ import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.app.aiding.CreateIdentifierArgs; -import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.aiding.RotateIdentifierArgs; import org.cardanofoundation.signify.cesr.exceptions.LibsodiumException; import org.cardanofoundation.signify.e2e.utils.TestUtils; @@ -54,7 +53,7 @@ public void singlesig_drt() throws Exception { CreateIdentifierArgs kargs = new CreateIdentifierArgs(); kargs.setDelpre(name1_id); - EventResult result = delegate.identifiers().create("delegate1", kargs); + var result = delegate.identifiers().create("delegate1", kargs); Operation op = result.op(); HabState delegate1 = delegate.identifiers().get("delegate1").get(); opResponseName = op.getName(); @@ -67,8 +66,8 @@ public void singlesig_drt() throws Exception { seal.put("s", "0"); seal.put("d", delegate1.getPrefix()); - result = delegator.identifiers().interact("name1", seal); - Operation op1 = result.op(); + var interactResult1 = delegator.identifiers().interact("name1", seal); + Operation op1 = interactResult1.op(); QueryOperation op2 = delegate.keyStates().query(name1_id, "1", null); waitOperationAsync( @@ -78,11 +77,11 @@ public void singlesig_drt() throws Exception { ); RotateIdentifierArgs karg = RotateIdentifierArgs.builder().build(); - result = delegate.identifiers().rotate("delegate1", karg); - op = result.op(); + var rotResult = delegate.identifiers().rotate("delegate1", karg); + op = rotResult.op(); opResponseName = op.getName(); - Assertions.assertEquals(opResponseName, "delegation." + result.serder().getKed().get("d")); + Assertions.assertEquals(opResponseName, "delegation." + rotResult.serder().getKed().get("d")); // delegator approves delegate delegate1 = delegate.identifiers().get("delegate1").get(); @@ -91,8 +90,8 @@ public void singlesig_drt() throws Exception { seal.put("s", "1"); seal.put("d", delegate1.getState().getD()); - result = delegator.identifiers().interact("name1", seal); - op1 = result.op(); + var interactResult2 = delegator.identifiers().interact("name1", seal); + op1 = interactResult2.op(); op2 = delegate.keyStates().query(name1_id, "2", null); List operationList = waitOperationAsync( diff --git a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigIXNTest.java b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigIXNTest.java index cc672303..1e0d1c4c 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigIXNTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigIXNTest.java @@ -1,7 +1,6 @@ package org.cardanofoundation.signify.e2e; import org.cardanofoundation.signify.app.clienting.SignifyClient; -import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.cesr.exceptions.LibsodiumException; import org.cardanofoundation.signify.e2e.utils.TestUtils; import org.cardanofoundation.signify.generated.keria.model.CompletedQueryOperation; @@ -66,7 +65,7 @@ public void singlesig_ixn_ixn1() throws Exception { assertNotNull(keyStateRecord0); // ixn - EventResult result = client1.identifiers().interact("name1", null); + var result = client1.identifiers().interact("name1", null); waitOperation(client1, result.op()); // local keystate after rot diff --git a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigROTTest.java b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigROTTest.java index 39c61e50..559be238 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigROTTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigROTTest.java @@ -1,6 +1,5 @@ package org.cardanofoundation.signify.e2e; -import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.aiding.RotateIdentifierArgs; import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.cesr.exceptions.LibsodiumException; @@ -76,7 +75,7 @@ public void singlesig_rot_rot1() throws Exception { // rot RotateIdentifierArgs args = RotateIdentifierArgs.builder().build(); - EventResult result = client1.identifiers().rotate("name1", args); + var result = client1.identifiers().rotate("name1", args); waitOperation(client1, result.op()); // local keystate after rot diff --git a/src/test/java/org/cardanofoundation/signify/e2e/WitnessTest.java b/src/test/java/org/cardanofoundation/signify/e2e/WitnessTest.java index 7860fd8a..f30bda13 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/WitnessTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/WitnessTest.java @@ -3,7 +3,6 @@ import org.cardanofoundation.signify.app.coring.Coring; import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.app.aiding.CreateIdentifierArgs; -import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.aiding.RotateIdentifierArgs; import org.cardanofoundation.signify.generated.keria.model.HabState; import org.cardanofoundation.signify.generated.keria.model.Tier; @@ -52,15 +51,15 @@ public void testWitness() throws Exception { kargs.setToad(1); kargs.setWits(Collections.singletonList(WITNESS_AID)); - EventResult icpResult1 = client1.identifiers().create("aid1", kargs); + var icpResult1 = client1.identifiers().create("aid1", kargs); waitOperation(client1, icpResult1.op()); HabState aid1 = client1.identifiers().get("aid1").get(); System.out.println("AID1: " + aid1.getPrefix()); assertEquals(1, aid1.getState().getB().size()); assertEquals(WITNESS_AID, aid1.getState().getB().getFirst()); - icpResult1 = client1.identifiers().rotate("aid1"); - waitOperation(client1, icpResult1.op()); + var rotResult1 = client1.identifiers().rotate("aid1"); + waitOperation(client1, rotResult1.op()); aid1 = client1.identifiers().get("aid1").get(); assertEquals(1, aid1.getState().getB().size()); assertEquals(WITNESS_AID, aid1.getState().getB().getFirst()); @@ -69,16 +68,16 @@ public void testWitness() throws Exception { RotateIdentifierArgs args = RotateIdentifierArgs.builder().build(); args.setCuts(Collections.singletonList(WITNESS_AID)); - icpResult1 = client1.identifiers().rotate("aid1", args); - waitOperation(client1, icpResult1.op()); + var rotResult2 = client1.identifiers().rotate("aid1", args); + waitOperation(client1, rotResult2.op()); aid1 = client1.identifiers().get("aid1").get(); assertEquals(0, aid1.getState().getB().size()); // Add witness again args.setCuts(null); args.setAdds(Collections.singletonList(WITNESS_AID)); - icpResult1 = client1.identifiers().rotate("aid1", args); - waitOperation(client1, icpResult1.op()); + var rotResult3 = client1.identifiers().rotate("aid1", args); + waitOperation(client1, rotResult3.op()); aid1 = client1.identifiers().get("aid1").get(); assertEquals(1, aid1.getState().getB().size()); assertEquals(WITNESS_AID, aid1.getState().getB().getFirst()); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java b/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java index 9ea3f43e..26fc8fb1 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java @@ -6,7 +6,6 @@ import lombok.Setter; import org.cardanofoundation.signify.app.Exchanging; import org.cardanofoundation.signify.app.aiding.CreateIdentifierArgs; -import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.aiding.RotateIdentifierArgs; import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.app.credentialing.credentials.CredentialData; @@ -73,7 +72,7 @@ public static Operation acceptMultisigIncept(SignifyClient client2, AcceptMultis createIdentifierArgs.setRstates(rstates); createIdentifierArgs.setDelpre(icp.get("di") != null ? icp.get("di").toString() : null); - EventResult icpResult2 = client2.identifiers().create(args.getGroupName(), createIdentifierArgs); + var icpResult2 = client2.identifiers().create(args.getGroupName(), createIdentifierArgs); Operation op2 = icpResult2.op(); Serder serder = icpResult2.serder(); List sigs = icpResult2.sigs(); @@ -107,7 +106,7 @@ public static Operation interactMultisig(SignifyClient client, String groupName, TestUtils.waitAndMarkNotification(client, "/multisig/ixn"); } - EventResult interactResult = client + var interactResult = client .identifiers() .interact(groupName, data); @@ -152,7 +151,7 @@ public static Operation rotateMultisig(SignifyClient client, String groupName, H TestUtils.waitAndMarkNotification(client, "/multisig/rot"); } - EventResult interactResult = client + var interactResult = client .identifiers() .rotate(groupName, kargs); @@ -208,7 +207,7 @@ public static List addEndRoleMultisig(SignifyClient client, String gr for (AidRecord signing : members.getSigning()) { String eid = signing.getEnds().getAgent().keySet().iterator().next(); - EventResult endRoleResult = client + var endRoleResult = client .identifiers() .addEndRole(multisigAID.getName(), "agent", eid, timestamp); @@ -261,7 +260,7 @@ public static List addEndRoleMultisigs(SignifyClient client, String g GroupMember members = client.identifiers().members(groupName); String eid = members.getSigning().getFirst().getEnds().getAgent().keySet().iterator().next(); - EventResult endRoleResult = client + var endRoleResult = client .identifiers() .addEndRole(multisigAID.getName(), "agent", eid, timestamp); @@ -374,7 +373,7 @@ public static Operation createAIDMultisig( TestUtils.waitAndMarkNotification(client, "/multisig/icp"); } - EventResult icpResult = client.identifiers().create(groupName, kargs); + var icpResult = client.identifiers().create(groupName, kargs); Operation op = icpResult.op(); Serder serder = icpResult.serder(); @@ -549,7 +548,7 @@ public static Operation delegateMultisig( anchor = (Map) ((List) ixn.get("a")).get(0); } - EventResult delResult = client.delegations().approve(multisigAID.getName(), anchor); + var delResult = client.delegations().approve(multisigAID.getName(), anchor); Operation appOp = delResult.op(); System.out.println("Delegator " + aid.getName() + "(" + aid.getPrefix() + ") approved delegation for " + multisigAID.getName() + " with anchor " + anchor); @@ -728,7 +727,7 @@ public static Operation startMultisigIncept( createIdentifierArgs.setStates(participantStates); createIdentifierArgs.setRstates(participantStates); - EventResult icpResult1 = client.identifiers().create(args.getGroupName(), createIdentifierArgs); + var icpResult1 = client.identifiers().create(args.getGroupName(), createIdentifierArgs); Operation op1 = icpResult1.op(); Serder serder = icpResult1.serder(); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java b/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java index 56066d9f..fa1134d1 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java @@ -10,7 +10,6 @@ import org.cardanofoundation.signify.app.Notifying; import org.cardanofoundation.signify.app.aiding.CreateIdentifierArgs; -import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.aiding.IdentifierListResponse; import org.cardanofoundation.signify.app.clienting.SignifyClient; import org.cardanofoundation.signify.app.credentialing.credentials.CredentialData; @@ -155,7 +154,7 @@ public static HabState getOrCreateAID(SignifyClient client, String name, CreateI if (existingAID.isPresent()) { return existingAID.get(); } else { - EventResult result = client.identifiers().create(name, kargs); + var result = client.identifiers().create(name, kargs); waitOperation(client, result.op()); HabState aid = client.identifiers().get(name) @@ -166,7 +165,7 @@ public static HabState getOrCreateAID(SignifyClient client, String name, CreateI } String pre = client.getAgent().getPre(); - EventResult op = client.identifiers().addEndRole(name, "agent", pre, null); + var op = client.identifiers().addEndRole(name, "agent", pre, null); waitOperation(client, op.op()); System.out.println(name + "AID:" + aid.getPrefix()); @@ -246,7 +245,7 @@ public static String[] getOrCreateIdentifier(SignifyClient client, String name, kargs.setToad(env.witnessIds().size()); kargs.setWits(env.witnessIds()); } - EventResult result = client.identifiers().create(name, kargs); + var result = client.identifiers().create(name, kargs); Operation opResult = waitOperation(client, result.op(), Operation.class); if (opResult instanceof CompletedWitnessOperation completed) { id = completed.getResponse().getI(); @@ -261,7 +260,7 @@ public static String[] getOrCreateIdentifier(SignifyClient client, String name, throw new IllegalStateException("Agent or pre is null"); } if (!hasEndRole(client, name, "agent", eid)) { - EventResult results = client.identifiers().addEndRole(name, "agent", eid, null); + var results = client.identifiers().addEndRole(name, "agent", eid, null); waitOperation(client, results.op()); } } From 9ee5fdb3b6b7b93b7660ac33a748675d11740749 Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Wed, 8 Apr 2026 15:56:23 +0700 Subject: [PATCH 04/20] fix EventResult for inception/rotation/interaction using a custom group sealed interface --- build.gradle | 24 +++++- .../app/aiding/IdentifierController.java | 82 ++++++++++++++++--- .../keria/model/DelegationOperation.java | 2 +- .../generated/keria/model/DoneOperation.java | 2 +- .../generated/keria/model/GroupOperation.java | 2 +- .../generated/keria/model/KelOperation.java | 12 +++ .../generated/keria/model/Operation.java | 1 + .../keria/model/SubmitOperation.java | 2 +- .../keria/model/WitnessOperation.java | 2 +- 9 files changed, 111 insertions(+), 18 deletions(-) create mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/KelOperation.java diff --git a/build.gradle b/build.gradle index bd9e04ab..a41a83c0 100644 --- a/build.gradle +++ b/build.gradle @@ -257,6 +257,7 @@ tasks.named("openApiGenerate") { "LocScheme", "OOBI", "Query", "Registry", "Submit", "Witness" ] + def kelOps = ["Done", "Witness", "Submit", "Group", "Delegation"] as Set def modelDir = file("src/main/java/org/cardanofoundation/signify/generated/keria/model") ops.each { op -> @@ -285,10 +286,11 @@ tasks.named("openApiGenerate") { // Replace the generated merged oneOf class with a sealed interface def target = new File(modelDir, "${op}Operation.java") def metadataMethod = metadataType ? "\n ${metadataType} getMetadata();" : "" + def extendsClause = kelOps.contains(op) ? "extends Operation, KelOperation" : "extends Operation" target.text = """\ package org.cardanofoundation.signify.generated.keria.model; -public sealed interface ${op}Operation extends Operation permits +public sealed interface ${op}Operation ${extendsClause} permits Pending${op}Operation, Completed${op}Operation, Failed${op}Operation { @@ -298,7 +300,11 @@ ${metadataMethod} } // Generate the general Operation sealed interface (union of all operation types) - def permitsEntries = ops.collect { op -> " ${op}Operation" }.join(",\n") + // KelOperation is also listed here as a permitted subtype + def permitsEntries = (ops.collect { op -> "${op}Operation" } + ["KelOperation"]) + .sort() + .collect { name -> " ${name}" } + .join(",\n") def operationFile = new File(modelDir, "Operation.java") operationFile.text = """\ @@ -313,6 +319,20 @@ ${permitsEntries} { String getName(); } +""" + + // Generate KelOperation — a sealed group interface for all KEL event operation types. + def kelPermits = kelOps.sort().collect { op -> " ${op}Operation" }.join(",\n") + def kelOperationFile = new File(modelDir, "KelOperation.java") + kelOperationFile.text = """\ +package org.cardanofoundation.signify.generated.keria.model; + +/** + * Marker interface for operations that result from appending a KEL event. + */ +public sealed interface KelOperation extends Operation permits +${kelPermits} { +} """ } } \ No newline at end of file diff --git a/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java b/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java index a3891004..73dd6a02 100644 --- a/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java +++ b/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java @@ -26,14 +26,16 @@ import java.security.DigestException; import java.util.*; import java.util.concurrent.ExecutionException; -import org.cardanofoundation.signify.generated.keria.model.EndrolesAidPostRequest; +import org.cardanofoundation.signify.generated.keria.model.DelegationOperation; import org.cardanofoundation.signify.generated.keria.model.DoneOperation; +import org.cardanofoundation.signify.generated.keria.model.EndrolesAidPostRequest; import org.cardanofoundation.signify.generated.keria.model.EndRoleOperation; import org.cardanofoundation.signify.generated.keria.model.GroupMember; +import org.cardanofoundation.signify.generated.keria.model.GroupOperation; import org.cardanofoundation.signify.generated.keria.model.HabState; +import org.cardanofoundation.signify.generated.keria.model.KelOperation; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; -import org.cardanofoundation.signify.generated.keria.model.KeyStateRecordKt; -import org.cardanofoundation.signify.generated.keria.model.Operation; +import org.cardanofoundation.signify.generated.keria.model.WitnessOperation; import static org.cardanofoundation.signify.cesr.util.CoreUtil.Versionage; import static org.cardanofoundation.signify.core.Httping.parseRangeHeaders; @@ -132,7 +134,8 @@ public HabState update(String name, IdentifierInfo info) throws InterruptedExcep * @param kargs Optional parameters to create the identifier * @return An EventResult to the inception result */ - public EventResult create(String name, CreateIdentifierArgs kargs) throws InterruptedException, DigestException, IOException, LibsodiumException { + @SuppressWarnings("unchecked") + public EventResult create(String name, CreateIdentifierArgs kargs) throws InterruptedException, DigestException, IOException, LibsodiumException { // Assuming kargs is an instance of a class with appropriate getters Algos algo = kargs.getAlgo() == null ? Algos.salty : kargs.getAlgo(); @@ -278,7 +281,8 @@ public EventResult create(String name, CreateIdentifierArgs kargs) th this.client.setPidx(this.client.getPidx() + 1); HttpResponse response = this.client.fetch("/identifiers", "POST", jsondata); - return new EventResult<>(serder, sigs, response, Operation.class); + Class opType = resolveKelOpTypeFromArgs(kargs, wits); + return new EventResult<>(serder, sigs, response, (Class) opType); } @@ -338,19 +342,74 @@ private Serder makeEndRole(String pre, String role, String eid, String stamp) th return Eventing.reply(route, data, stamp, null, Serials.JSON); } - public EventResult interact(String name, Object data) throws InterruptedException, DigestException, IOException, LibsodiumException { - InteractionResponse interactionResponse = this.createInteract(name, data); + @SuppressWarnings("unchecked") + public EventResult interact(String name, Object data) throws InterruptedException, DigestException, IOException, LibsodiumException { + HabState hab = this.get(name) + .orElseThrow(() -> new IllegalArgumentException("Identifier not found: " + name)); + Class opType = resolveKelOpTypeForIxn(hab); + InteractionResponse interactionResponse = this.createInteract(hab, data); HttpResponse response = this.client.fetch( "/identifiers/" + name + "/events", "POST", interactionResponse.jsondata() ); - return new EventResult<>(interactionResponse.serder(), interactionResponse.sigs(), response, DoneOperation.class); + return new EventResult<>(interactionResponse.serder(), interactionResponse.sigs(), response, (Class) opType); + } + + /** + * Resolve the expected KERIA operation type for an interaction (IXN) event. + */ + static Class resolveKelOpTypeForIxn(HabState hab) { + if (hab.getGroup() != null) { + return GroupOperation.class; + } + KeyStateRecord state = hab.getState(); + if (state != null && state.getB() != null && !state.getB().isEmpty()) { + return WitnessOperation.class; + } + return DoneOperation.class; + } + + /** + * Resolve the expected KERIA operation type for a rotation (ROT/DRT) event. + */ + static Class resolveKelOpTypeForRot(HabState hab) { + if (hab.getGroup() != null) { + return GroupOperation.class; + } + KeyStateRecord state = hab.getState(); + if (state != null && state.getDi() != null && !state.getDi().isEmpty()) { + return DelegationOperation.class; + } + if (state != null && state.getB() != null && !state.getB().isEmpty()) { + return WitnessOperation.class; + } + return DoneOperation.class; + } + + /** + * Resolve the expected KERIA operation type for an inception (ICP/DIP) event. + */ + private static Class resolveKelOpTypeFromArgs(CreateIdentifierArgs kargs, List wits) { + if (kargs.getMhab() != null || kargs.getStates() != null) { + return GroupOperation.class; + } + if (kargs.getDelpre() != null) { + return DelegationOperation.class; + } + if (!wits.isEmpty()) { + return WitnessOperation.class; + } + return DoneOperation.class; } public InteractionResponse createInteract(String name, Object data) throws InterruptedException, DigestException, IOException, LibsodiumException { HabState hab = this.get(name) .orElseThrow(() -> new IllegalArgumentException("Identifier not found: " + name)); + return this.createInteract(hab, data); + } + + private InteractionResponse createInteract(HabState hab, Object data) throws DigestException, IOException, LibsodiumException { String pre = hab.getPrefix(); KeyStateRecord state = hab.getState(); @@ -379,11 +438,12 @@ public InteractionResponse createInteract(String name, Object data) throws Inter return new InteractionResponse(serder, sigs.signatures(), jsondata); } - public EventResult rotate(String name) throws ExecutionException, InterruptedException, DigestException, IOException, LibsodiumException { + public EventResult rotate(String name) throws ExecutionException, InterruptedException, DigestException, IOException, LibsodiumException { return this.rotate(name, RotateIdentifierArgs.builder().build()); } - public EventResult rotate(String name, RotateIdentifierArgs kargs) throws InterruptedException, DigestException, IOException, LibsodiumException { + @SuppressWarnings("unchecked") + public EventResult rotate(String name, RotateIdentifierArgs kargs) throws InterruptedException, DigestException, IOException, LibsodiumException { boolean transferable = kargs.getTransferable() != null ? kargs.getTransferable() : true; String ncode = kargs.getNcode() != null ? kargs.getNcode() : MatterCodex.Ed25519_Seed.getValue(); int ncount = kargs.getNcount() != null ? kargs.getNcount() : 1; @@ -467,7 +527,7 @@ public EventResult rotate(String name, RotateIdentifierArgs kargs jsondata ); - return new EventResult<>(serder, sigs, res, DoneOperation.class); + return new EventResult<>(serder, sigs, res, (Class) resolveKelOpTypeForRot(hab)); } /** diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegationOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegationOperation.java index c2da015b..804564cd 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegationOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegationOperation.java @@ -1,6 +1,6 @@ package org.cardanofoundation.signify.generated.keria.model; -public sealed interface DelegationOperation extends Operation permits +public sealed interface DelegationOperation extends Operation, KelOperation permits PendingDelegationOperation, CompletedDelegationOperation, FailedDelegationOperation { diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java index ceab975c..71fcbe73 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java @@ -1,6 +1,6 @@ package org.cardanofoundation.signify.generated.keria.model; -public sealed interface DoneOperation extends Operation permits +public sealed interface DoneOperation extends Operation, KelOperation permits PendingDoneOperation, CompletedDoneOperation, FailedDoneOperation { diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java index 21b37bb2..05b50cf6 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java @@ -1,6 +1,6 @@ package org.cardanofoundation.signify.generated.keria.model; -public sealed interface GroupOperation extends Operation permits +public sealed interface GroupOperation extends Operation, KelOperation permits PendingGroupOperation, CompletedGroupOperation, FailedGroupOperation { diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/KelOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/KelOperation.java new file mode 100644 index 00000000..ea065a9a --- /dev/null +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/KelOperation.java @@ -0,0 +1,12 @@ +package org.cardanofoundation.signify.generated.keria.model; + +/** + * Marker interface for operations that result from appending a KEL event. + */ +public sealed interface KelOperation extends Operation permits + DelegationOperation, + DoneOperation, + GroupOperation, + SubmitOperation, + WitnessOperation { +} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java index fd4996f6..62046f57 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java @@ -13,6 +13,7 @@ public sealed interface Operation permits EndRoleOperation, ExchangeOperation, GroupOperation, + KelOperation, LocSchemeOperation, OOBIOperation, QueryOperation, diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/SubmitOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/SubmitOperation.java index 0cb303d2..f6c5b506 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/SubmitOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/SubmitOperation.java @@ -1,6 +1,6 @@ package org.cardanofoundation.signify.generated.keria.model; -public sealed interface SubmitOperation extends Operation permits +public sealed interface SubmitOperation extends Operation, KelOperation permits PendingSubmitOperation, CompletedSubmitOperation, FailedSubmitOperation { diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java index 8126a56d..608c937d 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java @@ -1,6 +1,6 @@ package org.cardanofoundation.signify.generated.keria.model; -public sealed interface WitnessOperation extends Operation permits +public sealed interface WitnessOperation extends Operation, KelOperation permits PendingWitnessOperation, CompletedWitnessOperation, FailedWitnessOperation { From a32b3bd70fb8d2a720676d6467b75321a6dcbc69 Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Thu, 9 Apr 2026 15:56:55 +0700 Subject: [PATCH 05/20] fix op depends, use Operation type instead of Object, Map --- build.gradle | 189 ++++++++++++++++++ ...legationOperationResponseDeserializer.java | 45 ----- ...redentialOperationDependsDeserializer.java | 28 +++ .../signify/app/coring/Operations.java | 87 +++++--- .../RegistryOperationDependsDeserializer.java | 28 +++ .../CompletedCredentialOperationDepends.java | 20 ++ .../CompletedRegistryOperationDepends.java | 20 ++ .../model/CredentialOperationDepends.java | 13 ++ .../model/CredentialOperationMetadata.java | 12 +- .../PendingCredentialOperationDepends.java | 20 ++ .../PendingRegistryOperationDepends.java | 20 ++ .../keria/model/RegistryOperationDepends.java | 13 ++ .../model/RegistryOperationMetadata.java | 11 +- .../signify/app/OperationsTest.java | 98 ++++----- .../signify/e2e/MultisigJoinTest.java | 30 ++- .../signify/e2e/MultisigTest.java | 15 +- .../signify/e2e/utils/TestUtils.java | 62 +++--- 17 files changed, 551 insertions(+), 160 deletions(-) delete mode 100644 src/main/java/org/cardanofoundation/signify/app/config/CompletedDelegationOperationResponseDeserializer.java create mode 100644 src/main/java/org/cardanofoundation/signify/app/coring/CredentialOperationDependsDeserializer.java create mode 100644 src/main/java/org/cardanofoundation/signify/app/coring/RegistryOperationDependsDeserializer.java create mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedCredentialOperationDepends.java create mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedRegistryOperationDepends.java create mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationDepends.java create mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingCredentialOperationDepends.java create mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingRegistryOperationDepends.java create mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationDepends.java diff --git a/build.gradle b/build.gradle index a41a83c0..f68b8d93 100644 --- a/build.gradle +++ b/build.gradle @@ -334,5 +334,194 @@ public sealed interface KelOperation extends Operation permits ${kelPermits} { } """ + + // Generate RegistryOperationDepends sealed interface + Pending/Completed impls + new File(modelDir, "RegistryOperationDepends.java").text = """\ +package org.cardanofoundation.signify.generated.keria.model; + +/** + * Represents the {@code depends} field of a {@link RegistryOperationMetadata}. + * The dependency is either still pending or already completed. + */ +public sealed interface RegistryOperationDepends + permits PendingRegistryOperationDepends, CompletedRegistryOperationDepends { + + String getName(); + + boolean isDone(); +} +""" + + new File(modelDir, "PendingRegistryOperationDepends.java").text = """\ +package org.cardanofoundation.signify.generated.keria.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public final class PendingRegistryOperationDepends implements RegistryOperationDepends { + + @JsonProperty("name") + private String name; + + @Override + public boolean isDone() { + return false; + } +} +""" + + new File(modelDir, "CompletedRegistryOperationDepends.java").text = """\ +package org.cardanofoundation.signify.generated.keria.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public final class CompletedRegistryOperationDepends implements RegistryOperationDepends { + + @JsonProperty("name") + private String name; + + @Override + public boolean isDone() { + return true; + } +} +""" + + // Patch RegistryOperationMetadata to use typed RegistryOperationDepends with custom deserializer + def registryMetaFile = new File(modelDir, "RegistryOperationMetadata.java") + if (registryMetaFile.exists()) { + def text = registryMetaFile.text + // Add JsonDeserialize import and RegistryOperationDependsDeserializer import + text = text.replace( + "import com.fasterxml.jackson.annotation.JsonCreator;", + "import com.fasterxml.jackson.annotation.JsonCreator;\nimport com.fasterxml.jackson.databind.annotation.JsonDeserialize;\nimport org.cardanofoundation.signify.app.coring.RegistryOperationDependsDeserializer;" + ) + // Change field type from Object to RegistryOperationDepends + text = text.replace("private Object depends = null;", "private RegistryOperationDepends depends = null;") + // Change builder method signature + text = text.replace( + "public RegistryOperationMetadata depends(@jakarta.annotation.Nullable Object depends) {", + "public RegistryOperationMetadata depends(@jakarta.annotation.Nullable RegistryOperationDepends depends) {" + ) + // Change getter return type + text = text.replace("public Object getDepends() {", "public RegistryOperationDepends getDepends() {") + // Change setter parameter type and add @JsonDeserialize + text = text.replace( + "public void setDepends(@jakarta.annotation.Nullable Object depends) {", + "@JsonDeserialize(using = RegistryOperationDependsDeserializer.class)\n public void setDepends(@jakarta.annotation.Nullable RegistryOperationDepends depends) {" + ) + registryMetaFile.text = text + } + + // Generate CredentialOperationDepends sealed interface + Pending/Completed impls + new File(modelDir, "CredentialOperationDepends.java").text = """\ +package org.cardanofoundation.signify.generated.keria.model; + +/** + * Represents the {@code depends} field of a {@link CredentialOperationMetadata}. + * The dependency is either still pending or already completed. + */ +public sealed interface CredentialOperationDepends + permits PendingCredentialOperationDepends, CompletedCredentialOperationDepends { + + String getName(); + + boolean isDone(); +} +""" + + new File(modelDir, "PendingCredentialOperationDepends.java").text = """\ +package org.cardanofoundation.signify.generated.keria.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public final class PendingCredentialOperationDepends implements CredentialOperationDepends { + + @JsonProperty("name") + private String name; + + @Override + public boolean isDone() { + return false; + } +} +""" + + new File(modelDir, "CompletedCredentialOperationDepends.java").text = """\ +package org.cardanofoundation.signify.generated.keria.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public final class CompletedCredentialOperationDepends implements CredentialOperationDepends { + + @JsonProperty("name") + private String name; + + @Override + public boolean isDone() { + return true; + } +} +""" + + // Patch CredentialOperationMetadata to use typed CredentialOperationDepends with custom deserializer + def credentialMetaFile = new File(modelDir, "CredentialOperationMetadata.java") + if (credentialMetaFile.exists()) { + def text = credentialMetaFile.text + // Add JsonDeserialize import and CredentialOperationDependsDeserializer import + text = text.replace( + "import com.fasterxml.jackson.annotation.JsonCreator;", + "import com.fasterxml.jackson.annotation.JsonCreator;\nimport com.fasterxml.jackson.databind.annotation.JsonDeserialize;\nimport org.cardanofoundation.signify.app.coring.CredentialOperationDependsDeserializer;" + ) + // Remove the old CredentialOperationMetadataDepends import (replaced by our sealed interface) + text = text.replace( + "import org.cardanofoundation.signify.generated.keria.model.CredentialOperationMetadataDepends;\n", + "" + ) + // Change field type + text = text.replace( + "private CredentialOperationMetadataDepends depends;", + "private CredentialOperationDepends depends;" + ) + // Change builder method signature + text = text.replace( + "public CredentialOperationMetadata depends(@jakarta.annotation.Nullable CredentialOperationMetadataDepends depends) {", + "public CredentialOperationMetadata depends(@jakarta.annotation.Nullable CredentialOperationDepends depends) {" + ) + // Change getter return type + text = text.replace( + "public CredentialOperationMetadataDepends getDepends() {", + "public CredentialOperationDepends getDepends() {" + ) + // Change setter parameter type and add @JsonDeserialize + text = text.replace( + "public void setDepends(@jakarta.annotation.Nullable CredentialOperationMetadataDepends depends) {", + "@JsonDeserialize(using = CredentialOperationDependsDeserializer.class)\n public void setDepends(@jakarta.annotation.Nullable CredentialOperationDepends depends) {" + ) + credentialMetaFile.text = text + } } } \ No newline at end of file diff --git a/src/main/java/org/cardanofoundation/signify/app/config/CompletedDelegationOperationResponseDeserializer.java b/src/main/java/org/cardanofoundation/signify/app/config/CompletedDelegationOperationResponseDeserializer.java deleted file mode 100644 index b8d42be8..00000000 --- a/src/main/java/org/cardanofoundation/signify/app/config/CompletedDelegationOperationResponseDeserializer.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.cardanofoundation.signify.app.config; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonDeserializer; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.module.SimpleModule; -import org.cardanofoundation.signify.generated.keria.model.CompletedDelegationOperationResponse; -import org.cardanofoundation.signify.generated.keria.model.ICPV1Kt; -import org.cardanofoundation.signify.generated.keria.model.KeyStateRecordKt; - -import java.io.IOException; - -/** - * Deserializes {@link CompletedDelegationOperationResponse} from a JSON object. - * String responses (delegation approval / IXN) are handled upstream by OperationDeserializer, - * which redirects them to {@code CompletedDelegatorOperation}. - */ -class CompletedDelegationOperationResponseDeserializer extends JsonDeserializer { - - /** - * Mapper without our CompletedDelegationOperationResponse deserializer (avoids recursion) - * but with all other custom deserializers needed for nested fields (e.g. ICPV1Kt). - */ - private static final ObjectMapper FALLBACK_MAPPER; - - static { - FALLBACK_MAPPER = new ObjectMapper(); - FALLBACK_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - SimpleModule module = new SimpleModule("FallbackModule"); - module.addDeserializer(ICPV1Kt.class, new ICPV1KtDeserializer()); - module.addDeserializer(KeyStateRecordKt.class, new KeyStateRecordKtDeserializer()); - FALLBACK_MAPPER.registerModule(module); - } - - @Override - public CompletedDelegationOperationResponse deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - // String responses are now handled by OperationDeserializer redirecting to CompletedDelegatorOperation - // Use a mapper with nested custom deserializers but without ours to avoid infinite recursion - JsonNode tree = p.getCodec().readTree(p); - return FALLBACK_MAPPER.treeToValue(tree, CompletedDelegationOperationResponse.class); - } -} diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/CredentialOperationDependsDeserializer.java b/src/main/java/org/cardanofoundation/signify/app/coring/CredentialOperationDependsDeserializer.java new file mode 100644 index 00000000..2d669c57 --- /dev/null +++ b/src/main/java/org/cardanofoundation/signify/app/coring/CredentialOperationDependsDeserializer.java @@ -0,0 +1,28 @@ +package org.cardanofoundation.signify.app.coring; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; +import org.cardanofoundation.signify.generated.keria.model.CompletedCredentialOperationDepends; +import org.cardanofoundation.signify.generated.keria.model.CredentialOperationDepends; +import org.cardanofoundation.signify.generated.keria.model.PendingCredentialOperationDepends; + +import java.io.IOException; + +public class CredentialOperationDependsDeserializer extends JsonDeserializer { + + @Override + public CredentialOperationDepends deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + JsonNode node = p.readValueAsTree(); + + boolean done = node.has("done") && node.get("done").asBoolean(false); + Class target = done + ? CompletedCredentialOperationDepends.class + : PendingCredentialOperationDepends.class; + + JsonParser nodeParser = node.traverse(p.getCodec()); + nodeParser.nextToken(); + return ctxt.readValue(nodeParser, target); + } +} diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java b/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java index 5b121126..b226565c 100644 --- a/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java +++ b/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java @@ -5,13 +5,12 @@ import org.cardanofoundation.signify.app.coring.deps.OperationsDeps; import org.cardanofoundation.signify.cesr.exceptions.LibsodiumException; import org.cardanofoundation.signify.cesr.util.Utils; -import org.cardanofoundation.signify.generated.keria.model.Operation; +import org.cardanofoundation.signify.generated.keria.model.*; import java.io.IOException; import java.net.HttpURLConnection; import java.net.http.HttpResponse; import java.util.List; -import java.util.Map; import java.util.Optional; import java.util.concurrent.atomic.AtomicBoolean; @@ -29,7 +28,7 @@ public Operations(OperationsDeps client) { * @param type The target class to deserialize into (e.g., CredentialOperation.class) * @return Optional containing the typed operation if found, or empty if not found */ - public Optional get(String name, Class type) throws IOException, InterruptedException, LibsodiumException { + public Optional get(String name, Class type) throws IOException, InterruptedException, LibsodiumException { String path = "/operations/" + name; HttpResponse response = this.client.fetch(path, "GET", null); @@ -87,30 +86,28 @@ public Operation wait(String operationName) throws IOException, InterruptedExcep * @param operationName The name of the operation to wait for * @param resultType The target class to deserialize the final result into (e.g., CredentialOperation.class) */ - public T wait(String operationName, Class resultType) throws IOException, InterruptedException, LibsodiumException { + public T wait(String operationName, Class resultType) throws IOException, InterruptedException, LibsodiumException { return wait(operationName, resultType, WaitOptions.builder().build(), System.currentTimeMillis()); } - public T wait(String operationName, Class resultType, WaitOptions options) throws IOException, InterruptedException, LibsodiumException { + public T wait(String operationName, Class resultType, WaitOptions options) throws IOException, InterruptedException, LibsodiumException { return wait(operationName, resultType, options, System.currentTimeMillis()); } @SuppressWarnings("unchecked") - private T wait(String operationName, Class resultType, WaitOptions options, long startingTime) throws IOException, InterruptedException, LibsodiumException { + private T wait(String operationName, Class resultType, WaitOptions options, long startingTime) throws IOException, InterruptedException, LibsodiumException { int minSleep = options.getMinSleep(); int maxSleep = options.getMaxSleep(); int increaseFactor = options.getIncreaseFactor(); - // First fetch to check depends and initial state - Map json = get(operationName, Map.class) + Operation op = get(operationName, Operation.class) .orElseThrow(() -> new IOException("Operation not found: " + operationName)); - // Wait on dependencies first - waitOnDepends(json, options, startingTime); + waitOnDepends(op, options, startingTime); - if (Boolean.TRUE.equals(json.get("done"))) { - if (resultType == Map.class) { - return (T) json; + if (isDone(op)) { + if (resultType == Operation.class) { + return (T) op; } return get(operationName, resultType) .orElseThrow(() -> new IOException("Operation not found: " + operationName)); @@ -119,15 +116,15 @@ private T wait(String operationName, Class resultType, WaitOptions option int retries = 0; while (true) { - json = get(operationName, Map.class) + op = get(operationName, Operation.class) .orElseThrow(() -> new IOException("Operation not found: " + operationName)); int delay = Math.max(minSleep, Math.min(maxSleep, (int) Math.pow(2, retries) * increaseFactor)); retries++; - if (Boolean.TRUE.equals(json.get("done"))) { - if (resultType == Map.class) { - return (T) json; + if (isDone(op)) { + if (resultType == Operation.class) { + return (T) op; } return get(operationName, resultType) .orElseThrow(() -> new IOException("Operation not found: " + operationName)); @@ -145,18 +142,52 @@ private T wait(String operationName, Class resultType, WaitOptions option } } - @SuppressWarnings("unchecked") - private void waitOnDepends(Map operationJson, WaitOptions options, long startingTime) throws IOException, InterruptedException, LibsodiumException { - Object metadata = operationJson.get("metadata"); - if (metadata instanceof Map metaMap) { - Object depends = metaMap.get("depends"); - if (depends instanceof Map depMap) { - String depName = (String) depMap.get("name"); - Boolean depDone = depMap.get("done") instanceof Boolean b ? b : null; - if (depName != null && !Boolean.TRUE.equals(depDone)) { - wait(depName, Map.class, options, startingTime); - } + private static boolean isDone(Operation op) { + return switch (op) { + case PendingChallengeOperation ignored -> false; + case PendingCredentialOperation ignored -> false; + case PendingDelegationOperation ignored -> false; + case PendingDelegatorOperation ignored -> false; + case PendingDoneOperation ignored -> false; + case PendingEndRoleOperation ignored -> false; + case PendingExchangeOperation ignored -> false; + case PendingGroupOperation ignored -> false; + case PendingLocSchemeOperation ignored -> false; + case PendingOOBIOperation ignored -> false; + case PendingQueryOperation ignored -> false; + case PendingRegistryOperation ignored -> false; + case PendingSubmitOperation ignored -> false; + case PendingWitnessOperation ignored -> false; + default -> true; + }; + } + + private void waitOnDepends(Operation operation, WaitOptions options, long startingTime) throws IOException, InterruptedException, LibsodiumException { + String dependsName = null; + boolean dependsDone = true; + + if (operation instanceof DelegatorOperation op && op.getMetadata() != null) { + DelegatorOperationMetadataDepends dep = op.getMetadata().getDepends(); + if (dep != null) { + dependsName = dep.getName(); + dependsDone = dep.getDone() == DelegatorOperationMetadataDepends.DoneEnum.TRUE; } + } else if (operation instanceof RegistryOperation op && op.getMetadata() != null) { + RegistryOperationDepends dep = op.getMetadata().getDepends(); + if (dep != null) { + dependsName = dep.getName(); + dependsDone = dep.isDone(); + } + } else if (operation instanceof CredentialOperation op && op.getMetadata() != null) { + CredentialOperationDepends dep = op.getMetadata().getDepends(); + if (dep != null) { + dependsName = dep.getName(); + dependsDone = dep.isDone(); + } + } + + if (dependsName != null && !dependsDone) { + wait(dependsName, Operation.class, options, startingTime); } } diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/RegistryOperationDependsDeserializer.java b/src/main/java/org/cardanofoundation/signify/app/coring/RegistryOperationDependsDeserializer.java new file mode 100644 index 00000000..a5a02293 --- /dev/null +++ b/src/main/java/org/cardanofoundation/signify/app/coring/RegistryOperationDependsDeserializer.java @@ -0,0 +1,28 @@ +package org.cardanofoundation.signify.app.coring; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; +import org.cardanofoundation.signify.generated.keria.model.CompletedRegistryOperationDepends; +import org.cardanofoundation.signify.generated.keria.model.PendingRegistryOperationDepends; +import org.cardanofoundation.signify.generated.keria.model.RegistryOperationDepends; + +import java.io.IOException; + +public class RegistryOperationDependsDeserializer extends JsonDeserializer { + + @Override + public RegistryOperationDepends deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + JsonNode node = p.readValueAsTree(); + + boolean done = node.has("done") && node.get("done").asBoolean(false); + Class target = done + ? CompletedRegistryOperationDepends.class + : PendingRegistryOperationDepends.class; + + JsonParser nodeParser = node.traverse(p.getCodec()); + nodeParser.nextToken(); + return ctxt.readValue(nodeParser, target); + } +} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedCredentialOperationDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedCredentialOperationDepends.java new file mode 100644 index 00000000..b79897b1 --- /dev/null +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedCredentialOperationDepends.java @@ -0,0 +1,20 @@ +package org.cardanofoundation.signify.generated.keria.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public final class CompletedCredentialOperationDepends implements CredentialOperationDepends { + + @JsonProperty("name") + private String name; + + @Override + public boolean isDone() { + return true; + } +} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedRegistryOperationDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedRegistryOperationDepends.java new file mode 100644 index 00000000..92b9166d --- /dev/null +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedRegistryOperationDepends.java @@ -0,0 +1,20 @@ +package org.cardanofoundation.signify.generated.keria.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public final class CompletedRegistryOperationDepends implements RegistryOperationDepends { + + @JsonProperty("name") + private String name; + + @Override + public boolean isDone() { + return true; + } +} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationDepends.java new file mode 100644 index 00000000..653f4173 --- /dev/null +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationDepends.java @@ -0,0 +1,13 @@ +package org.cardanofoundation.signify.generated.keria.model; + +/** + * Represents the {@code depends} field of a {@link CredentialOperationMetadata}. + * The dependency is either still pending or already completed. + */ +public sealed interface CredentialOperationDepends + permits PendingCredentialOperationDepends, CompletedCredentialOperationDepends { + + String getName(); + + boolean isDone(); +} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationMetadata.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationMetadata.java index 61648f66..bc50a182 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationMetadata.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationMetadata.java @@ -18,9 +18,10 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import org.cardanofoundation.signify.app.coring.CredentialOperationDependsDeserializer; import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonValue; -import org.cardanofoundation.signify.generated.keria.model.CredentialOperationMetadataDepends; import org.cardanofoundation.signify.generated.keria.model.CredentialSad; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonTypeName; @@ -40,7 +41,7 @@ public class CredentialOperationMetadata { public static final String JSON_PROPERTY_DEPENDS = "depends"; @jakarta.annotation.Nullable - private CredentialOperationMetadataDepends depends; + private CredentialOperationDepends depends; public CredentialOperationMetadata() { } @@ -70,7 +71,7 @@ public void setCed(@jakarta.annotation.Nonnull CredentialSad ced) { this.ced = ced; } - public CredentialOperationMetadata depends(@jakarta.annotation.Nullable CredentialOperationMetadataDepends depends) { + public CredentialOperationMetadata depends(@jakarta.annotation.Nullable CredentialOperationDepends depends) { this.depends = depends; return this; @@ -84,14 +85,15 @@ public CredentialOperationMetadata depends(@jakarta.annotation.Nullable Credenti @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public CredentialOperationMetadataDepends getDepends() { + public CredentialOperationDepends getDepends() { return depends; } @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setDepends(@jakarta.annotation.Nullable CredentialOperationMetadataDepends depends) { + @JsonDeserialize(using = CredentialOperationDependsDeserializer.class) + public void setDepends(@jakarta.annotation.Nullable CredentialOperationDepends depends) { this.depends = depends; } diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingCredentialOperationDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingCredentialOperationDepends.java new file mode 100644 index 00000000..35efa5f0 --- /dev/null +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingCredentialOperationDepends.java @@ -0,0 +1,20 @@ +package org.cardanofoundation.signify.generated.keria.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public final class PendingCredentialOperationDepends implements CredentialOperationDepends { + + @JsonProperty("name") + private String name; + + @Override + public boolean isDone() { + return false; + } +} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingRegistryOperationDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingRegistryOperationDepends.java new file mode 100644 index 00000000..fb837067 --- /dev/null +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingRegistryOperationDepends.java @@ -0,0 +1,20 @@ +package org.cardanofoundation.signify.generated.keria.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public final class PendingRegistryOperationDepends implements RegistryOperationDepends { + + @JsonProperty("name") + private String name; + + @Override + public boolean isDone() { + return false; + } +} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationDepends.java new file mode 100644 index 00000000..cd2efdfb --- /dev/null +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationDepends.java @@ -0,0 +1,13 @@ +package org.cardanofoundation.signify.generated.keria.model; + +/** + * Represents the {@code depends} field of a {@link RegistryOperationMetadata}. + * The dependency is either still pending or already completed. + */ +public sealed interface RegistryOperationDepends + permits PendingRegistryOperationDepends, CompletedRegistryOperationDepends { + + String getName(); + + boolean isDone(); +} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadata.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadata.java index 405937c5..146a3dbd 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadata.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadata.java @@ -18,6 +18,8 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import org.cardanofoundation.signify.app.coring.RegistryOperationDependsDeserializer; import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonValue; import org.cardanofoundation.signify.generated.keria.model.Anchor; @@ -40,7 +42,7 @@ public class RegistryOperationMetadata { public static final String JSON_PROPERTY_DEPENDS = "depends"; @jakarta.annotation.Nullable - private Object depends = null; + private RegistryOperationDepends depends = null; public static final String JSON_PROPERTY_ANCHOR = "anchor"; @jakarta.annotation.Nonnull @@ -74,7 +76,7 @@ public void setPre(@jakarta.annotation.Nonnull String pre) { this.pre = pre; } - public RegistryOperationMetadata depends(@jakarta.annotation.Nullable Object depends) { + public RegistryOperationMetadata depends(@jakarta.annotation.Nullable RegistryOperationDepends depends) { this.depends = depends; return this; @@ -88,14 +90,15 @@ public RegistryOperationMetadata depends(@jakarta.annotation.Nullable Object dep @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = false) @JsonInclude(value = JsonInclude.Include.ALWAYS) - public Object getDepends() { + public RegistryOperationDepends getDepends() { return depends; } @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = false) @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDepends(@jakarta.annotation.Nullable Object depends) { + @JsonDeserialize(using = RegistryOperationDependsDeserializer.class) + public void setDepends(@jakarta.annotation.Nullable RegistryOperationDepends depends) { this.depends = depends; } diff --git a/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java b/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java index ea1623ee..358f2943 100644 --- a/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java +++ b/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java @@ -3,7 +3,7 @@ import org.cardanofoundation.signify.app.coring.Operations; import org.cardanofoundation.signify.app.coring.deps.OperationsDeps; import org.cardanofoundation.signify.cesr.exceptions.LibsodiumException; -import org.cardanofoundation.signify.cesr.util.Utils; +import org.cardanofoundation.signify.generated.keria.model.Operation; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -11,7 +11,7 @@ import java.io.IOException; import java.net.http.HttpResponse; -import java.util.*; +import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; @@ -105,16 +105,15 @@ void canDeleteOperationByName() throws IOException, InterruptedException, Libsod @Test @DisplayName("Does not poll when operation is already done") void doesNotWaitForOperationThatIsAlreadyDone() throws IOException, InterruptedException, LibsodiumException { - Map operation = buildOperationMap(true, true); - String operationName = (String) operation.get("name"); + String opName = "locscheme." + UUID.randomUUID(); HttpResponse mockResponse = Mockito.mock(HttpResponse.class); - Mockito.when(mockResponse.body()).thenReturn(Utils.jsonStringify(operation)); + Mockito.when(mockResponse.body()).thenReturn(doneLocSchemeOpJson(opName)); Mockito.when(mockResponse.statusCode()).thenReturn(200); when(client.fetch(anyString(), anyString(), isNull())) .thenReturn(mockResponse); - operations.wait(operationName, Map.class); + operations.wait(opName, Operation.class); // 1 fetch: initial check finds done=true, returns immediately verify(client, times(1)).fetch(anyString(), anyString(), isNull()); } @@ -122,24 +121,21 @@ void doesNotWaitForOperationThatIsAlreadyDone() throws IOException, InterruptedE @Test @DisplayName("Returns when operation is done after first poll") void returnsWhenOperationIsDoneAfterFirstPoll() throws IOException, InterruptedException, LibsodiumException { - Map pendingOp = buildOperationMap(false, true); - Map doneOp = buildOperationMap(true, true); - doneOp.put("name", pendingOp.get("name")); - String operationName = (String) pendingOp.get("name"); + String opName = "locscheme." + UUID.randomUUID(); HttpResponse pendingResponse = Mockito.mock(HttpResponse.class); - Mockito.when(pendingResponse.body()).thenReturn(Utils.jsonStringify(pendingOp)); + Mockito.when(pendingResponse.body()).thenReturn(pendingLocSchemeOpJson(opName)); Mockito.when(pendingResponse.statusCode()).thenReturn(200); HttpResponse doneResponse = Mockito.mock(HttpResponse.class); - Mockito.when(doneResponse.body()).thenReturn(Utils.jsonStringify(doneOp)); + Mockito.when(doneResponse.body()).thenReturn(doneLocSchemeOpJson(opName)); Mockito.when(doneResponse.statusCode()).thenReturn(200); when(client.fetch(anyString(), anyString(), isNull())) .thenReturn(pendingResponse) .thenReturn(doneResponse); - operations.wait(operationName, Map.class); + operations.wait(opName, Operation.class); // 1 initial fetch + 1 poll verify(client, times(2)).fetch(anyString(), anyString(), isNull()); } @@ -147,17 +143,14 @@ void returnsWhenOperationIsDoneAfterFirstPoll() throws IOException, InterruptedE @Test @DisplayName("Returns when operation is done after second poll") void returnsWhenOperationIsDoneAfterSecondPoll() throws IOException, InterruptedException, LibsodiumException { - Map pendingOp = buildOperationMap(false, true); - Map doneOp = buildOperationMap(true, true); - doneOp.put("name", pendingOp.get("name")); - String operationName = (String) pendingOp.get("name"); + String opName = "locscheme." + UUID.randomUUID(); HttpResponse pendingResponse = Mockito.mock(HttpResponse.class); - Mockito.when(pendingResponse.body()).thenReturn(Utils.jsonStringify(pendingOp)); + Mockito.when(pendingResponse.body()).thenReturn(pendingLocSchemeOpJson(opName)); Mockito.when(pendingResponse.statusCode()).thenReturn(200); HttpResponse doneResponse = Mockito.mock(HttpResponse.class); - Mockito.when(doneResponse.body()).thenReturn(Utils.jsonStringify(doneOp)); + Mockito.when(doneResponse.body()).thenReturn(doneLocSchemeOpJson(opName)); Mockito.when(doneResponse.statusCode()).thenReturn(200); when(client.fetch(anyString(), anyString(), isNull())) @@ -168,7 +161,7 @@ void returnsWhenOperationIsDoneAfterSecondPoll() throws IOException, Interrupted Operations.WaitOptions options = Operations.WaitOptions.builder() .maxSleep(10) .build(); - operations.wait(operationName, Map.class, options); + operations.wait(opName, Operation.class, options); // 1 initial + 2 polls verify(client, times(3)).fetch(anyString(), anyString(), isNull()); } @@ -176,39 +169,49 @@ void returnsWhenOperationIsDoneAfterSecondPoll() throws IOException, Interrupted @Test @DisplayName("Returns when child operation is also done") void returnsWhenChildOperationIsAlsoDone() throws IOException, InterruptedException, LibsodiumException { + String depName = "registry." + UUID.randomUUID(); + String mainName = "registry." + UUID.randomUUID(); + HttpResponse response1 = Mockito.mock(HttpResponse.class); - Mockito.when(response1.body()).thenReturn(Utils.jsonStringify(buildOperationMap(false, false))); + // main: pending, depends (depName) is not done + Mockito.when(response1.body()).thenReturn(pendingRegistryWithDependsJson(mainName, depName, false)); Mockito.when(response1.statusCode()).thenReturn(200); HttpResponse response2 = Mockito.mock(HttpResponse.class); - Mockito.when(response2.body()).thenReturn(Utils.jsonStringify(buildOperationMap(false, true))); + // dep: pending, no nested depends + Mockito.when(response2.body()).thenReturn(pendingRegistryOpJson(depName)); Mockito.when(response2.statusCode()).thenReturn(200); HttpResponse response3 = Mockito.mock(HttpResponse.class); - Mockito.when(response3.body()).thenReturn(Utils.jsonStringify(buildOperationMap(true, true))); + // dep: done + Mockito.when(response3.body()).thenReturn(doneRegistryOpJson(depName)); Mockito.when(response3.statusCode()).thenReturn(200); + HttpResponse response4 = Mockito.mock(HttpResponse.class); + // main: done + Mockito.when(response4.body()).thenReturn(doneRegistryOpJson(mainName)); + Mockito.when(response4.statusCode()).thenReturn(200); + when(client.fetch(anyString(), anyString(), isNull())) - .thenReturn(response1) // main: initial fetch - not done, depends not done - .thenReturn(response2) // depends: initial fetch - not done, its depends done - .thenReturn(response3) // depends: poll - done - .thenReturn(response3); // main: poll - done + .thenReturn(response1) // main: initial fetch - pending, depends not done + .thenReturn(response2) // dep: initial fetch - pending, no nested depends + .thenReturn(response3) // dep: poll - done + .thenReturn(response4); // main: poll - done Operations.WaitOptions options = Operations.WaitOptions.builder() .maxSleep(10) .build(); - operations.wait("witness.main", Map.class, options); + operations.wait(mainName, Operation.class, options); verify(client, times(4)).fetch(anyString(), anyString(), isNull()); } @Test @DisplayName("Throw if aborting operation") void throwIfAbortingOperation() throws IOException, InterruptedException, LibsodiumException { - Map operation = buildOperationMap(false, true); - String operationName = (String) operation.get("name"); + String opName = "locscheme." + UUID.randomUUID(); HttpResponse mockResponse = Mockito.mock(HttpResponse.class); - Mockito.when(mockResponse.body()).thenReturn(Utils.jsonStringify(operation)); + Mockito.when(mockResponse.body()).thenReturn(pendingLocSchemeOpJson(opName)); Mockito.when(mockResponse.statusCode()).thenReturn(200); when(client.fetch(anyString(), anyString(), isNull())) @@ -220,26 +223,29 @@ void throwIfAbortingOperation() throws IOException, InterruptedException, Libsod .build(); Exception exception = assertThrows(InterruptedException.class, - () -> operations.wait(operationName, Map.class, options)); + () -> operations.wait(opName, Operation.class, options)); assertEquals("Operation aborted: Timeout", exception.getMessage()); } - Map buildOperationMap(boolean done, boolean dependsDone) { - Map depends = new LinkedHashMap<>(); - depends.put("name", UUID.randomUUID().toString()); - depends.put("response", "depend"); - depends.put("done", dependsDone); + // --- JSON helpers --- + + private String pendingLocSchemeOpJson(String name) { + return "{\"name\": \"" + name + "\"}"; + } + + private String doneLocSchemeOpJson(String name) { + return "{\"name\": \"" + name + "\", \"response\": {\"eid\": \"ETest\", \"scheme\": \"http\", \"url\": \"http://test\"}}"; + } - Map metadata = new LinkedHashMap<>(); - metadata.put("depends", depends); - metadata.put("key", "value"); + private String pendingRegistryOpJson(String name) { + return "{\"name\": \"" + name + "\", \"metadata\": {\"pre\": \"ETest\", \"anchor\": {\"pre\": \"ETest\", \"sn\": 0, \"d\": \"ETest\"}}}"; + } - Map operation = new LinkedHashMap<>(); - operation.put("name", UUID.randomUUID().toString()); - operation.put("response", "response"); - operation.put("done", done); - operation.put("metadata", metadata); + private String pendingRegistryWithDependsJson(String name, String depName, boolean depDone) { + return "{\"name\": \"" + name + "\", \"metadata\": {\"pre\": \"ETest\", \"anchor\": {\"pre\": \"ETest\", \"sn\": 0, \"d\": \"ETest\"}, \"depends\": {\"name\": \"" + depName + "\", \"done\": " + depDone + "}}}"; + } - return operation; + private String doneRegistryOpJson(String name) { + return "{\"name\": \"" + name + "\", \"response\": {\"anchor\": {\"pre\": \"ETest\", \"sn\": 0, \"d\": \"ETest\"}}}"; } } \ No newline at end of file diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigJoinTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigJoinTest.java index 31e0566f..ac627dfd 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigJoinTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigJoinTest.java @@ -221,9 +221,18 @@ public void multisigJoinTestAddMember3() throws Exception { new WaitOperationArgs(client3, updates.get(5)) ); - KeyStateRecord aid2State = ((CompletedQueryOperation) statesUpdate.get(0)).getResponse(); - KeyStateRecord aid3State = ((CompletedQueryOperation) statesUpdate.get(1)).getResponse(); - KeyStateRecord aid1State = ((CompletedQueryOperation) statesUpdate.get(2)).getResponse(); + KeyStateRecord aid2State = switch (statesUpdate.get(0)) { + case CompletedQueryOperation op -> op.getResponse(); + default -> throw new IllegalStateException("Unexpected operation state"); + }; + KeyStateRecord aid3State = switch (statesUpdate.get(1)) { + case CompletedQueryOperation op -> op.getResponse(); + default -> throw new IllegalStateException("Unexpected operation state"); + }; + KeyStateRecord aid1State = switch (statesUpdate.get(2)) { + case CompletedQueryOperation op -> op.getResponse(); + default -> throw new IllegalStateException("Unexpected operation state"); + }; List states = Arrays.asList(aid1State, aid2State); List rstates = new ArrayList<>(states); @@ -323,9 +332,18 @@ public void signingKeysAndJoinTest() throws Exception { new WaitOperationArgs(client3, updates.get(5)) ); - KeyStateRecord aid2State = ((CompletedQueryOperation) statesUpdate.get(0)).getResponse(); - KeyStateRecord aid3State = ((CompletedQueryOperation) statesUpdate.get(1)).getResponse(); - KeyStateRecord aid1State = ((CompletedQueryOperation) statesUpdate.get(2)).getResponse(); + KeyStateRecord aid2State = switch (statesUpdate.get(0)) { + case CompletedQueryOperation op -> op.getResponse(); + default -> throw new IllegalStateException("Unexpected operation state"); + }; + KeyStateRecord aid3State = switch (statesUpdate.get(1)) { + case CompletedQueryOperation op -> op.getResponse(); + default -> throw new IllegalStateException("Unexpected operation state"); + }; + KeyStateRecord aid1State = switch (statesUpdate.get(2)) { + case CompletedQueryOperation op -> op.getResponse(); + default -> throw new IllegalStateException("Unexpected operation state"); + }; List states = Arrays.asList(aid1State, aid2State, aid3State); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java index 6d559825..963a1332 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java @@ -389,16 +389,25 @@ public void multisig() throws Exception { // Update new key states op1 = client1.keyStates().query(aid2.getPrefix(), "1"); op1 = waitOperation(client1, op1); - KeyStateRecord aid2State = ((CompletedQueryOperation) op1).getResponse(); + KeyStateRecord aid2State = switch (op1) { + case CompletedQueryOperation op -> op.getResponse(); + default -> throw new IllegalStateException("Unexpected operation state"); + }; op1 = client1.keyStates().query(aid3.getPrefix(), "1"); op1 = waitOperation(client1, op1); - KeyStateRecord aid3State = ((CompletedQueryOperation) op1).getResponse(); + KeyStateRecord aid3State = switch (op1) { + case CompletedQueryOperation op -> op.getResponse(); + default -> throw new IllegalStateException("Unexpected operation state"); + }; op2 = client2.keyStates().query(aid3.getPrefix(), "1"); op2 = waitOperation(client2, op2); op2 = client2.keyStates().query(aid1.getPrefix(), "1"); op2 = waitOperation(client2, op2); - KeyStateRecord aid1State = ((CompletedQueryOperation) op2).getResponse(); + KeyStateRecord aid1State = switch (op2) { + case CompletedQueryOperation op -> op.getResponse(); + default -> throw new IllegalStateException("Unexpected operation state"); + }; op3 = client3.keyStates().query(aid1.getPrefix(), "1"); op3 = waitOperation(client3, op3); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java b/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java index fa1134d1..b46f669a 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java @@ -247,13 +247,12 @@ public static String[] getOrCreateIdentifier(SignifyClient client, String name, } var result = client.identifiers().create(name, kargs); Operation opResult = waitOperation(client, result.op(), Operation.class); - if (opResult instanceof CompletedWitnessOperation completed) { - id = completed.getResponse().getI(); - } else if (opResult instanceof CompletedDelegationOperation completed) { - id = completed.getResponse().getI(); - } else if (opResult instanceof CompletedDoneOperation completed) { - id = completed.getResponse().getI(); - } + id = switch (opResult) { + case CompletedWitnessOperation completed -> completed.getResponse().getI(); + case CompletedDelegationOperation completed -> completed.getResponse().getI(); + case CompletedDoneOperation completed -> completed.getResponse().getI(); + default -> id; + }; if (client.getAgent() != null && client.getAgent().getPre() != null) { eid = client.getAgent().getPre(); } else { @@ -387,24 +386,39 @@ public static void warnNotifications(List clients) throws Excepti assertTrue(count > 0); } - @SuppressWarnings("unchecked") public static void deleteOperations(SignifyClient client, String operationName) throws IOException, InterruptedException, LibsodiumException { - Map opMap = client.operations().get(operationName, Map.class).orElse(null); - if (opMap != null) { - Object metadata = opMap.get("metadata"); - if (metadata instanceof Map metaMap) { - Object depends = metaMap.get("depends"); - if (depends instanceof Map depMap) { - String depName = (String) depMap.get("name"); - if (depName != null) { - deleteOperations(client, depName); - } - } - } + deleteOperations(client, operationName, null); + } + + private static void deleteOperations(SignifyClient client, String operationName, String knownDepName) throws IOException, InterruptedException, LibsodiumException { + // Use knownDepName if provided (from pending state); otherwise try to discover via re-fetch. + // Completed operations may omit metadata, so the re-fetch approach is a best-effort fallback. + String depName = knownDepName; + if (depName == null) { + Operation op = client.operations().get(operationName, Operation.class).orElse(null); + depName = extractDepName(op); + } + if (depName != null) { + deleteOperations(client, depName, null); } client.operations().delete(operationName); } + private static String extractDepName(Operation op) { + if (op == null) return null; + if (op instanceof DelegatorOperation delegatorOp && delegatorOp.getMetadata() != null) { + DelegatorOperationMetadataDepends dep = delegatorOp.getMetadata().getDepends(); + if (dep != null) return dep.getName(); + } else if (op instanceof RegistryOperation registryOp && registryOp.getMetadata() != null) { + RegistryOperationDepends dep = registryOp.getMetadata().getDepends(); + if (dep != null) return dep.getName(); + } else if (op instanceof CredentialOperation credentialOp && credentialOp.getMetadata() != null) { + CredentialOperationDepends dep = credentialOp.getMetadata().getDepends(); + if (dep != null) return dep.getName(); + } + return null; + } + public static void deleteOperation(SignifyClient client, String name) throws IOException, InterruptedException, LibsodiumException { client.operations().delete(name); } @@ -510,19 +524,21 @@ public static Operation waitOperation( Operation op ) throws IOException, InterruptedException, LibsodiumException { String name = op.getName(); + String depName = extractDepName(op); Operation result = client.operations().wait(name); - deleteOperations(client, name); + deleteOperations(client, name, depName); return result; } - public static T waitOperation( + public static T waitOperation( SignifyClient client, Operation op, Class type ) throws IOException, InterruptedException, LibsodiumException { String name = op.getName(); + String depName = extractDepName(op); T result = client.operations().wait(name, type); - deleteOperations(client, name); + deleteOperations(client, name, depName); return result; } From 63b91f330b49eafa9a5af5bfb6d1e8a39580dd25 Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Fri, 10 Apr 2026 16:40:36 +0700 Subject: [PATCH 06/20] fix review comments: improve deleting op and it's depends --- .../app/aiding/IdentifierController.java | 19 +++---- .../app/coring/OperationDeserializer.java | 14 ++--- .../signify/e2e/MultisigTest.java | 9 +--- .../signify/e2e/utils/TestUtils.java | 54 ++++++++----------- 4 files changed, 37 insertions(+), 59 deletions(-) diff --git a/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java b/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java index 73dd6a02..44c11b28 100644 --- a/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java +++ b/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java @@ -134,8 +134,7 @@ public HabState update(String name, IdentifierInfo info) throws InterruptedExcep * @param kargs Optional parameters to create the identifier * @return An EventResult to the inception result */ - @SuppressWarnings("unchecked") - public EventResult create(String name, CreateIdentifierArgs kargs) throws InterruptedException, DigestException, IOException, LibsodiumException { + public EventResult create(String name, CreateIdentifierArgs kargs) throws InterruptedException, DigestException, IOException, LibsodiumException { // Assuming kargs is an instance of a class with appropriate getters Algos algo = kargs.getAlgo() == null ? Algos.salty : kargs.getAlgo(); @@ -281,8 +280,7 @@ public EventResult create(String name, CreateIdentifierArgs kargs) this.client.setPidx(this.client.getPidx() + 1); HttpResponse response = this.client.fetch("/identifiers", "POST", jsondata); - Class opType = resolveKelOpTypeFromArgs(kargs, wits); - return new EventResult<>(serder, sigs, response, (Class) opType); + return new EventResult<>(serder, sigs, response, resolveKelOpTypeFromArgs(kargs, wits)); } @@ -342,18 +340,16 @@ private Serder makeEndRole(String pre, String role, String eid, String stamp) th return Eventing.reply(route, data, stamp, null, Serials.JSON); } - @SuppressWarnings("unchecked") - public EventResult interact(String name, Object data) throws InterruptedException, DigestException, IOException, LibsodiumException { + public EventResult interact(String name, Object data) throws InterruptedException, DigestException, IOException, LibsodiumException { HabState hab = this.get(name) .orElseThrow(() -> new IllegalArgumentException("Identifier not found: " + name)); - Class opType = resolveKelOpTypeForIxn(hab); InteractionResponse interactionResponse = this.createInteract(hab, data); HttpResponse response = this.client.fetch( "/identifiers/" + name + "/events", "POST", interactionResponse.jsondata() ); - return new EventResult<>(interactionResponse.serder(), interactionResponse.sigs(), response, (Class) opType); + return new EventResult<>(interactionResponse.serder(), interactionResponse.sigs(), response, resolveKelOpTypeForIxn(hab)); } /** @@ -438,12 +434,11 @@ private InteractionResponse createInteract(HabState hab, Object data) throws Dig return new InteractionResponse(serder, sigs.signatures(), jsondata); } - public EventResult rotate(String name) throws ExecutionException, InterruptedException, DigestException, IOException, LibsodiumException { + public EventResult rotate(String name) throws ExecutionException, InterruptedException, DigestException, IOException, LibsodiumException { return this.rotate(name, RotateIdentifierArgs.builder().build()); } - @SuppressWarnings("unchecked") - public EventResult rotate(String name, RotateIdentifierArgs kargs) throws InterruptedException, DigestException, IOException, LibsodiumException { + public EventResult rotate(String name, RotateIdentifierArgs kargs) throws InterruptedException, DigestException, IOException, LibsodiumException { boolean transferable = kargs.getTransferable() != null ? kargs.getTransferable() : true; String ncode = kargs.getNcode() != null ? kargs.getNcode() : MatterCodex.Ed25519_Seed.getValue(); int ncount = kargs.getNcount() != null ? kargs.getNcount() : 1; @@ -527,7 +522,7 @@ public EventResult rotate(String name, RotateIdentifierArgs kargs) jsondata ); - return new EventResult<>(serder, sigs, res, (Class) resolveKelOpTypeForRot(hab)); + return new EventResult<>(serder, sigs, res, resolveKelOpTypeForRot(hab)); } /** diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/OperationDeserializer.java b/src/main/java/org/cardanofoundation/signify/app/coring/OperationDeserializer.java index 07919e2d..d82995a7 100644 --- a/src/main/java/org/cardanofoundation/signify/app/coring/OperationDeserializer.java +++ b/src/main/java/org/cardanofoundation/signify/app/coring/OperationDeserializer.java @@ -107,14 +107,16 @@ public Operation deserialize(JsonParser p, DeserializationContext ctxt) throws I } } - // Determine state: response → completed, error → failed, otherwise → pending + if (opType == OperationType.DELEGATION + && node.has("metadata") + && !node.get("metadata").isNull() + && node.get("metadata").has("teepre")) { + opType = OperationType.DELEGATOR; + } + Class concreteType; if (node.has("response") && !node.get("response").isNull()) { - if (opType == OperationType.DELEGATION && node.get("response").isTextual()) { - concreteType = OperationType.DELEGATOR.completed; - } else { - concreteType = opType.completed; - } + concreteType = opType.completed; } else if (node.has("error") && !node.get("error").isNull()) { concreteType = opType.failed; } else { diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java index 963a1332..090cdc23 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java @@ -984,14 +984,7 @@ public static Operation waitOperations( Operation op) throws IOException, InterruptedException, LibsodiumException { String name = op.getName(); Operation operation = client.operations().wait(name); - TestUtils.deleteOperations(client, name); - TestUtils.deleteOperation(client, name); + TestUtils.deleteOperations(client, operation); return operation; } - - public void deleteOperations(List clients, List name) throws Exception { - for (int i = 1; i <= clients.size(); i++) { - deleteOperation(clients.get(i - 1), name.get(i - 1)); - } - } } diff --git a/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java b/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java index b46f669a..0f70a826 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java @@ -386,37 +386,27 @@ public static void warnNotifications(List clients) throws Excepti assertTrue(count > 0); } - public static void deleteOperations(SignifyClient client, String operationName) throws IOException, InterruptedException, LibsodiumException { - deleteOperations(client, operationName, null); - } + public static void deleteOperations(SignifyClient client, Operation op) throws IOException, InterruptedException, LibsodiumException { + String dep = findDependsName(op); - private static void deleteOperations(SignifyClient client, String operationName, String knownDepName) throws IOException, InterruptedException, LibsodiumException { - // Use knownDepName if provided (from pending state); otherwise try to discover via re-fetch. - // Completed operations may omit metadata, so the re-fetch approach is a best-effort fallback. - String depName = knownDepName; - if (depName == null) { - Operation op = client.operations().get(operationName, Operation.class).orElse(null); - depName = extractDepName(op); - } - if (depName != null) { - deleteOperations(client, depName, null); + if (dep != null) { + client.operations().delete(dep); } - client.operations().delete(operationName); - } - - private static String extractDepName(Operation op) { - if (op == null) return null; - if (op instanceof DelegatorOperation delegatorOp && delegatorOp.getMetadata() != null) { - DelegatorOperationMetadataDepends dep = delegatorOp.getMetadata().getDepends(); - if (dep != null) return dep.getName(); - } else if (op instanceof RegistryOperation registryOp && registryOp.getMetadata() != null) { - RegistryOperationDepends dep = registryOp.getMetadata().getDepends(); - if (dep != null) return dep.getName(); - } else if (op instanceof CredentialOperation credentialOp && credentialOp.getMetadata() != null) { - CredentialOperationDepends dep = credentialOp.getMetadata().getDepends(); - if (dep != null) return dep.getName(); - } - return null; + + client.operations().delete(op.getName()); + } + + private static String findDependsName(Operation op) { + return switch (op) { + case null -> null; + case DelegatorOperation d when d.getMetadata() != null && d.getMetadata().getDepends() != null -> + d.getMetadata().getDepends().getName(); + case RegistryOperation r when r.getMetadata() != null && r.getMetadata().getDepends() != null -> + r.getMetadata().getDepends().getName(); + case CredentialOperation c when c.getMetadata() != null && c.getMetadata().getDepends() != null -> + c.getMetadata().getDepends().getName(); + default -> null; + }; } public static void deleteOperation(SignifyClient client, String name) throws IOException, InterruptedException, LibsodiumException { @@ -524,9 +514,8 @@ public static Operation waitOperation( Operation op ) throws IOException, InterruptedException, LibsodiumException { String name = op.getName(); - String depName = extractDepName(op); Operation result = client.operations().wait(name); - deleteOperations(client, name, depName); + deleteOperations(client, op); return result; } @@ -536,9 +525,8 @@ public static T waitOperation( Class type ) throws IOException, InterruptedException, LibsodiumException { String name = op.getName(); - String depName = extractDepName(op); T result = client.operations().wait(name, type); - deleteOperations(client, name, depName); + deleteOperations(client, op); return result; } From 8e742a844e2baddb94d37d3b265b4c7c3fe382bb Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Fri, 10 Apr 2026 17:52:49 +0700 Subject: [PATCH 07/20] Add sealed interface for DelegatorOperationDepends --- build.gradle | 100 ++++++++++++++++++ ...DelegatorOperationDependsDeserializer.java | 28 +++++ .../signify/app/coring/Operations.java | 38 +++---- .../CompletedDelegatorOperationDepends.java | 20 ++++ .../model/DelegatorOperationDepends.java | 13 +++ .../model/DelegatorOperationMetadata.java | 12 ++- .../PendingDelegatorOperationDepends.java | 20 ++++ 7 files changed, 202 insertions(+), 29 deletions(-) create mode 100644 src/main/java/org/cardanofoundation/signify/app/coring/DelegatorOperationDependsDeserializer.java create mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDelegatorOperationDepends.java create mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationDepends.java create mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDelegatorOperationDepends.java diff --git a/build.gradle b/build.gradle index f68b8d93..a33cbca6 100644 --- a/build.gradle +++ b/build.gradle @@ -523,5 +523,105 @@ public final class CompletedCredentialOperationDepends implements CredentialOper ) credentialMetaFile.text = text } + + // Generate DelegatorOperationDepends sealed interface + Pending/Completed impls + new File(modelDir, "DelegatorOperationDepends.java").text = """\ +package org.cardanofoundation.signify.generated.keria.model; + +/** + * Represents the {@code depends} field of a {@link DelegatorOperationMetadata}. + * The dependency is either still pending or already completed. + */ +public sealed interface DelegatorOperationDepends + permits PendingDelegatorOperationDepends, CompletedDelegatorOperationDepends { + + String getName(); + + boolean isDone(); +} +""" + + new File(modelDir, "PendingDelegatorOperationDepends.java").text = """\ +package org.cardanofoundation.signify.generated.keria.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public final class PendingDelegatorOperationDepends implements DelegatorOperationDepends { + + @JsonProperty("name") + private String name; + + @Override + public boolean isDone() { + return false; + } +} +""" + + new File(modelDir, "CompletedDelegatorOperationDepends.java").text = """\ +package org.cardanofoundation.signify.generated.keria.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public final class CompletedDelegatorOperationDepends implements DelegatorOperationDepends { + + @JsonProperty("name") + private String name; + + @Override + public boolean isDone() { + return true; + } +} +""" + + // Patch DelegatorOperationMetadata to use typed DelegatorOperationDepends with custom deserializer + def delegatorMetaFile = new File(modelDir, "DelegatorOperationMetadata.java") + if (delegatorMetaFile.exists()) { + def text = delegatorMetaFile.text + // Add JsonDeserialize import and DelegatorOperationDependsDeserializer import + text = text.replace( + "import com.fasterxml.jackson.annotation.JsonCreator;", + "import com.fasterxml.jackson.annotation.JsonCreator;\nimport com.fasterxml.jackson.databind.annotation.JsonDeserialize;\nimport org.cardanofoundation.signify.app.coring.DelegatorOperationDependsDeserializer;" + ) + // Remove the old DelegatorOperationMetadataDepends import (replaced by our sealed interface) + text = text.replace( + "import org.cardanofoundation.signify.generated.keria.model.DelegatorOperationMetadataDepends;\n", + "" + ) + // Change field type + text = text.replace( + "private DelegatorOperationMetadataDepends depends;", + "private DelegatorOperationDepends depends;" + ) + // Change builder method signature + text = text.replace( + "public DelegatorOperationMetadata depends(@jakarta.annotation.Nullable DelegatorOperationMetadataDepends depends) {", + "public DelegatorOperationMetadata depends(@jakarta.annotation.Nullable DelegatorOperationDepends depends) {" + ) + // Change getter return type + text = text.replace( + "public DelegatorOperationMetadataDepends getDepends() {", + "public DelegatorOperationDepends getDepends() {" + ) + // Change setter parameter type and add @JsonDeserialize + text = text.replace( + "public void setDepends(@jakarta.annotation.Nullable DelegatorOperationMetadataDepends depends) {", + "@JsonDeserialize(using = DelegatorOperationDependsDeserializer.class)\n public void setDepends(@jakarta.annotation.Nullable DelegatorOperationDepends depends) {" + ) + delegatorMetaFile.text = text + } } } \ No newline at end of file diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/DelegatorOperationDependsDeserializer.java b/src/main/java/org/cardanofoundation/signify/app/coring/DelegatorOperationDependsDeserializer.java new file mode 100644 index 00000000..38d85043 --- /dev/null +++ b/src/main/java/org/cardanofoundation/signify/app/coring/DelegatorOperationDependsDeserializer.java @@ -0,0 +1,28 @@ +package org.cardanofoundation.signify.app.coring; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; +import org.cardanofoundation.signify.generated.keria.model.CompletedDelegatorOperationDepends; +import org.cardanofoundation.signify.generated.keria.model.DelegatorOperationDepends; +import org.cardanofoundation.signify.generated.keria.model.PendingDelegatorOperationDepends; + +import java.io.IOException; + +public class DelegatorOperationDependsDeserializer extends JsonDeserializer { + + @Override + public DelegatorOperationDepends deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + JsonNode node = p.readValueAsTree(); + + boolean done = node.has("done") && node.get("done").asBoolean(false); + Class target = done + ? CompletedDelegatorOperationDepends.class + : PendingDelegatorOperationDepends.class; + + JsonParser nodeParser = node.traverse(p.getCodec()); + nodeParser.nextToken(); + return ctxt.readValue(nodeParser, target); + } +} diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java b/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java index b226565c..11cf001b 100644 --- a/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java +++ b/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java @@ -163,31 +163,21 @@ private static boolean isDone(Operation op) { } private void waitOnDepends(Operation operation, WaitOptions options, long startingTime) throws IOException, InterruptedException, LibsodiumException { - String dependsName = null; - boolean dependsDone = true; - - if (operation instanceof DelegatorOperation op && op.getMetadata() != null) { - DelegatorOperationMetadataDepends dep = op.getMetadata().getDepends(); - if (dep != null) { - dependsName = dep.getName(); - dependsDone = dep.getDone() == DelegatorOperationMetadataDepends.DoneEnum.TRUE; - } - } else if (operation instanceof RegistryOperation op && op.getMetadata() != null) { - RegistryOperationDepends dep = op.getMetadata().getDepends(); - if (dep != null) { - dependsName = dep.getName(); - dependsDone = dep.isDone(); - } - } else if (operation instanceof CredentialOperation op && op.getMetadata() != null) { - CredentialOperationDepends dep = op.getMetadata().getDepends(); - if (dep != null) { - dependsName = dep.getName(); - dependsDone = dep.isDone(); - } - } + String depName = switch (operation) { + case DelegatorOperation op when op.getMetadata() != null + && op.getMetadata().getDepends() != null + && !op.getMetadata().getDepends().isDone() -> op.getMetadata().getDepends().getName(); + case RegistryOperation op when op.getMetadata() != null + && op.getMetadata().getDepends() != null + && !op.getMetadata().getDepends().isDone() -> op.getMetadata().getDepends().getName(); + case CredentialOperation op when op.getMetadata() != null + && op.getMetadata().getDepends() != null + && !op.getMetadata().getDepends().isDone() -> op.getMetadata().getDepends().getName(); + default -> null; + }; - if (dependsName != null && !dependsDone) { - wait(dependsName, Operation.class, options, startingTime); + if (depName != null) { + wait(depName, Operation.class, options, startingTime); } } diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDelegatorOperationDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDelegatorOperationDepends.java new file mode 100644 index 00000000..01b13c7b --- /dev/null +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDelegatorOperationDepends.java @@ -0,0 +1,20 @@ +package org.cardanofoundation.signify.generated.keria.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public final class CompletedDelegatorOperationDepends implements DelegatorOperationDepends { + + @JsonProperty("name") + private String name; + + @Override + public boolean isDone() { + return true; + } +} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationDepends.java new file mode 100644 index 00000000..abaef802 --- /dev/null +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationDepends.java @@ -0,0 +1,13 @@ +package org.cardanofoundation.signify.generated.keria.model; + +/** + * Represents the {@code depends} field of a {@link DelegatorOperationMetadata}. + * The dependency is either still pending or already completed. + */ +public sealed interface DelegatorOperationDepends + permits PendingDelegatorOperationDepends, CompletedDelegatorOperationDepends { + + String getName(); + + boolean isDone(); +} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadata.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadata.java index b0ec8d73..8cf4ccb5 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadata.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadata.java @@ -18,10 +18,11 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import org.cardanofoundation.signify.app.coring.DelegatorOperationDependsDeserializer; import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonValue; import org.cardanofoundation.signify.generated.keria.model.Anchor; -import org.cardanofoundation.signify.generated.keria.model.DelegatorOperationMetadataDepends; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonTypeName; @@ -50,7 +51,7 @@ public class DelegatorOperationMetadata { public static final String JSON_PROPERTY_DEPENDS = "depends"; @jakarta.annotation.Nullable - private DelegatorOperationMetadataDepends depends; + private DelegatorOperationDepends depends; public DelegatorOperationMetadata() { } @@ -130,7 +131,7 @@ public void setAnchor(@jakarta.annotation.Nullable Anchor anchor) { this.anchor = anchor; } - public DelegatorOperationMetadata depends(@jakarta.annotation.Nullable DelegatorOperationMetadataDepends depends) { + public DelegatorOperationMetadata depends(@jakarta.annotation.Nullable DelegatorOperationDepends depends) { this.depends = depends; return this; @@ -144,14 +145,15 @@ public DelegatorOperationMetadata depends(@jakarta.annotation.Nullable Delegator @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public DelegatorOperationMetadataDepends getDepends() { + public DelegatorOperationDepends getDepends() { return depends; } @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setDepends(@jakarta.annotation.Nullable DelegatorOperationMetadataDepends depends) { + @JsonDeserialize(using = DelegatorOperationDependsDeserializer.class) + public void setDepends(@jakarta.annotation.Nullable DelegatorOperationDepends depends) { this.depends = depends; } diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDelegatorOperationDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDelegatorOperationDepends.java new file mode 100644 index 00000000..48a8b430 --- /dev/null +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDelegatorOperationDepends.java @@ -0,0 +1,20 @@ +package org.cardanofoundation.signify.generated.keria.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public final class PendingDelegatorOperationDepends implements DelegatorOperationDepends { + + @JsonProperty("name") + private String name; + + @Override + public boolean isDone() { + return false; + } +} From 3583fce8872022d5262ba774320395a867d694cf Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Fri, 10 Apr 2026 18:33:54 +0700 Subject: [PATCH 08/20] fix sealed interfaces --- build.gradle | 6 +++--- .../signify/generated/keria/model/DelegationOperation.java | 2 +- .../signify/generated/keria/model/DoneOperation.java | 2 +- .../signify/generated/keria/model/GroupOperation.java | 2 +- .../signify/generated/keria/model/Operation.java | 7 +------ .../signify/generated/keria/model/SubmitOperation.java | 2 +- .../signify/generated/keria/model/WitnessOperation.java | 2 +- 7 files changed, 9 insertions(+), 14 deletions(-) diff --git a/build.gradle b/build.gradle index a33cbca6..db08176b 100644 --- a/build.gradle +++ b/build.gradle @@ -286,7 +286,7 @@ tasks.named("openApiGenerate") { // Replace the generated merged oneOf class with a sealed interface def target = new File(modelDir, "${op}Operation.java") def metadataMethod = metadataType ? "\n ${metadataType} getMetadata();" : "" - def extendsClause = kelOps.contains(op) ? "extends Operation, KelOperation" : "extends Operation" + def extendsClause = kelOps.contains(op) ? "extends KelOperation" : "extends Operation" target.text = """\ package org.cardanofoundation.signify.generated.keria.model; @@ -300,8 +300,8 @@ ${metadataMethod} } // Generate the general Operation sealed interface (union of all operation types) - // KelOperation is also listed here as a permitted subtype - def permitsEntries = (ops.collect { op -> "${op}Operation" } + ["KelOperation"]) + // KelOperation is listed as a permitted subtype; individual KelOp types are only reachable via KelOperation + def permitsEntries = (ops.findAll { !kelOps.contains(it) }.collect { op -> "${op}Operation" } + ["KelOperation"]) .sort() .collect { name -> " ${name}" } .join(",\n") diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegationOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegationOperation.java index 804564cd..7dc48e2b 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegationOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegationOperation.java @@ -1,6 +1,6 @@ package org.cardanofoundation.signify.generated.keria.model; -public sealed interface DelegationOperation extends Operation, KelOperation permits +public sealed interface DelegationOperation extends KelOperation permits PendingDelegationOperation, CompletedDelegationOperation, FailedDelegationOperation { diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java index 71fcbe73..e4cccd5e 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java @@ -1,6 +1,6 @@ package org.cardanofoundation.signify.generated.keria.model; -public sealed interface DoneOperation extends Operation, KelOperation permits +public sealed interface DoneOperation extends KelOperation permits PendingDoneOperation, CompletedDoneOperation, FailedDoneOperation { diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java index 05b50cf6..5fbab86f 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java @@ -1,6 +1,6 @@ package org.cardanofoundation.signify.generated.keria.model; -public sealed interface GroupOperation extends Operation, KelOperation permits +public sealed interface GroupOperation extends KelOperation permits PendingGroupOperation, CompletedGroupOperation, FailedGroupOperation { diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java index 62046f57..e0b76520 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java @@ -7,19 +7,14 @@ public sealed interface Operation permits ChallengeOperation, CredentialOperation, - DelegationOperation, DelegatorOperation, - DoneOperation, EndRoleOperation, ExchangeOperation, - GroupOperation, KelOperation, LocSchemeOperation, OOBIOperation, QueryOperation, - RegistryOperation, - SubmitOperation, - WitnessOperation { + RegistryOperation { String getName(); } diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/SubmitOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/SubmitOperation.java index f6c5b506..7327e456 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/SubmitOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/SubmitOperation.java @@ -1,6 +1,6 @@ package org.cardanofoundation.signify.generated.keria.model; -public sealed interface SubmitOperation extends Operation, KelOperation permits +public sealed interface SubmitOperation extends KelOperation permits PendingSubmitOperation, CompletedSubmitOperation, FailedSubmitOperation { diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java index 608c937d..eb73c747 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java @@ -1,6 +1,6 @@ package org.cardanofoundation.signify.generated.keria.model; -public sealed interface WitnessOperation extends Operation, KelOperation permits +public sealed interface WitnessOperation extends KelOperation permits PendingWitnessOperation, CompletedWitnessOperation, FailedWitnessOperation { From ae746572f2825b47682d08b3c74abc148b4dfce9 Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Tue, 14 Apr 2026 14:48:29 +0700 Subject: [PATCH 09/20] improve EventResult --- .../signify/app/Delegating.java | 10 +-- .../signify/app/aiding/EventResult.java | 9 +-- .../app/aiding/IdentifierController.java | 65 +++++++++---------- 3 files changed, 40 insertions(+), 44 deletions(-) diff --git a/src/main/java/org/cardanofoundation/signify/app/Delegating.java b/src/main/java/org/cardanofoundation/signify/app/Delegating.java index dc526e14..326aa817 100644 --- a/src/main/java/org/cardanofoundation/signify/app/Delegating.java +++ b/src/main/java/org/cardanofoundation/signify/app/Delegating.java @@ -5,7 +5,8 @@ import org.cardanofoundation.signify.app.aiding.EventResult; import org.cardanofoundation.signify.app.aiding.InteractionResponse; import org.cardanofoundation.signify.cesr.exceptions.LibsodiumException; -import org.cardanofoundation.signify.generated.keria.model.DelegationOperation; +import org.cardanofoundation.signify.cesr.util.Utils; +import org.cardanofoundation.signify.generated.keria.model.DelegatorOperation; import java.io.IOException; import java.net.http.HttpResponse; @@ -31,7 +32,7 @@ public Delegations(SignifyClient client) { * @return The delegated approval result * @throws Exception if the fetch operation fails */ - public EventResult approve(String name, Object data) throws LibsodiumException, DigestException, IOException, InterruptedException { + public EventResult approve(String name, Object data) throws LibsodiumException, DigestException, IOException, InterruptedException { InteractionResponse interactionResponse = this.client .identifiers() .createInteract(name, data); @@ -41,10 +42,11 @@ public EventResult approve(String name, Object data) throws "POST", interactionResponse.jsondata() ); - return new EventResult<>(interactionResponse.serder(), interactionResponse.sigs(), res, DelegationOperation.class); + DelegatorOperation op = Utils.fromJson(res.body(), DelegatorOperation.class); + return new EventResult<>(interactionResponse.serder(), interactionResponse.sigs(), op); } - public EventResult approve(String name) throws LibsodiumException, DigestException, IOException, InterruptedException { + public EventResult approve(String name) throws LibsodiumException, DigestException, IOException, InterruptedException { return this.approve(name, null); } } diff --git a/src/main/java/org/cardanofoundation/signify/app/aiding/EventResult.java b/src/main/java/org/cardanofoundation/signify/app/aiding/EventResult.java index 6d20491c..a78a2908 100644 --- a/src/main/java/org/cardanofoundation/signify/app/aiding/EventResult.java +++ b/src/main/java/org/cardanofoundation/signify/app/aiding/EventResult.java @@ -1,16 +1,13 @@ package org.cardanofoundation.signify.app.aiding; -import java.io.IOException; import java.net.http.HttpResponse; import java.util.List; import org.cardanofoundation.signify.cesr.Serder; -import org.cardanofoundation.signify.cesr.util.Utils; import org.cardanofoundation.signify.generated.keria.model.Operation; -public record EventResult(Serder serder, List sigs, HttpResponse response, Class opType) { - - public T op() throws IOException { - return Utils.fromJson(response.body(), opType); +public record EventResult(Serder serder, List sigs, T opInstance) { + public T op() { + return opInstance; } } \ No newline at end of file diff --git a/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java b/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java index 44c11b28..15c3bdc6 100644 --- a/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java +++ b/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java @@ -1,4 +1,9 @@ + package org.cardanofoundation.signify.app.aiding; +import org.cardanofoundation.signify.generated.keria.model.PendingGroupOperation; +import org.cardanofoundation.signify.generated.keria.model.PendingWitnessOperation; +import org.cardanofoundation.signify.generated.keria.model.PendingDelegationOperation; +import org.cardanofoundation.signify.generated.keria.model.PendingDoneOperation; import com.fasterxml.jackson.core.type.TypeReference; import org.cardanofoundation.signify.cesr.Keeping; @@ -26,16 +31,13 @@ import java.security.DigestException; import java.util.*; import java.util.concurrent.ExecutionException; -import org.cardanofoundation.signify.generated.keria.model.DelegationOperation; -import org.cardanofoundation.signify.generated.keria.model.DoneOperation; import org.cardanofoundation.signify.generated.keria.model.EndrolesAidPostRequest; import org.cardanofoundation.signify.generated.keria.model.EndRoleOperation; import org.cardanofoundation.signify.generated.keria.model.GroupMember; -import org.cardanofoundation.signify.generated.keria.model.GroupOperation; import org.cardanofoundation.signify.generated.keria.model.HabState; import org.cardanofoundation.signify.generated.keria.model.KelOperation; +import org.cardanofoundation.signify.generated.keria.model.Operation; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; -import org.cardanofoundation.signify.generated.keria.model.WitnessOperation; import static org.cardanofoundation.signify.cesr.util.CoreUtil.Versionage; import static org.cardanofoundation.signify.core.Httping.parseRangeHeaders; @@ -134,7 +136,7 @@ public HabState update(String name, IdentifierInfo info) throws InterruptedExcep * @param kargs Optional parameters to create the identifier * @return An EventResult to the inception result */ - public EventResult create(String name, CreateIdentifierArgs kargs) throws InterruptedException, DigestException, IOException, LibsodiumException { + public EventResult create(String name, CreateIdentifierArgs kargs) throws InterruptedException, DigestException, IOException, LibsodiumException { // Assuming kargs is an instance of a class with appropriate getters Algos algo = kargs.getAlgo() == null ? Algos.salty : kargs.getAlgo(); @@ -280,7 +282,8 @@ public EventResult create(String name, CreateIdentifierA this.client.setPidx(this.client.getPidx() + 1); HttpResponse response = this.client.fetch("/identifiers", "POST", jsondata); - return new EventResult<>(serder, sigs, response, resolveKelOpTypeFromArgs(kargs, wits)); + KelOperation kelOp = Utils.fromJson(response.body(), KelOperation.class); + return new EventResult(serder, sigs, kelOp); } @@ -315,7 +318,8 @@ public EventResult addEndRole(String name, String role, String "POST", endrolesAidPostRequest ); - return new EventResult<>(rpy, sigs, res, EndRoleOperation.class); + EndRoleOperation op = Utils.fromJson(res.body(), EndRoleOperation.class); + return new EventResult<>(rpy, sigs, op); } /** @@ -340,7 +344,7 @@ private Serder makeEndRole(String pre, String role, String eid, String stamp) th return Eventing.reply(route, data, stamp, null, Serials.JSON); } - public EventResult interact(String name, Object data) throws InterruptedException, DigestException, IOException, LibsodiumException { + public EventResult interact(String name, Object data) throws InterruptedException, DigestException, IOException, LibsodiumException { HabState hab = this.get(name) .orElseThrow(() -> new IllegalArgumentException("Identifier not found: " + name)); InteractionResponse interactionResponse = this.createInteract(hab, data); @@ -349,55 +353,44 @@ public EventResult interact(String name, Object data) th "POST", interactionResponse.jsondata() ); - return new EventResult<>(interactionResponse.serder(), interactionResponse.sigs(), response, resolveKelOpTypeForIxn(hab)); + KelOperation kelOp = Utils.fromJson(response.body(), KelOperation.class); + return new EventResult(interactionResponse.serder(), interactionResponse.sigs(), kelOp); } /** * Resolve the expected KERIA operation type for an interaction (IXN) event. */ - static Class resolveKelOpTypeForIxn(HabState hab) { + static KelOperation resolveKelOpTypeForIxn(HabState hab) { if (hab.getGroup() != null) { - return GroupOperation.class; + return new PendingGroupOperation(); } KeyStateRecord state = hab.getState(); if (state != null && state.getB() != null && !state.getB().isEmpty()) { - return WitnessOperation.class; + return new PendingWitnessOperation(); } - return DoneOperation.class; + return new PendingDoneOperation(); } /** * Resolve the expected KERIA operation type for a rotation (ROT/DRT) event. */ - static Class resolveKelOpTypeForRot(HabState hab) { + static KelOperation resolveKelOpTypeForRot(HabState hab) { if (hab.getGroup() != null) { - return GroupOperation.class; + return new PendingGroupOperation(); } KeyStateRecord state = hab.getState(); if (state != null && state.getDi() != null && !state.getDi().isEmpty()) { - return DelegationOperation.class; + return new PendingDelegationOperation(); } if (state != null && state.getB() != null && !state.getB().isEmpty()) { - return WitnessOperation.class; + return new PendingWitnessOperation(); } - return DoneOperation.class; + return new PendingDoneOperation(); } /** * Resolve the expected KERIA operation type for an inception (ICP/DIP) event. */ - private static Class resolveKelOpTypeFromArgs(CreateIdentifierArgs kargs, List wits) { - if (kargs.getMhab() != null || kargs.getStates() != null) { - return GroupOperation.class; - } - if (kargs.getDelpre() != null) { - return DelegationOperation.class; - } - if (!wits.isEmpty()) { - return WitnessOperation.class; - } - return DoneOperation.class; - } public InteractionResponse createInteract(String name, Object data) throws InterruptedException, DigestException, IOException, LibsodiumException { HabState hab = this.get(name) @@ -416,10 +409,13 @@ private InteractionResponse createInteract(HabState hab, Object data) throws Dig data = Collections.singletonList(data); } + @SuppressWarnings("unchecked") + List dataList = (List) data; + InteractArgs interactArgs = InteractArgs.builder() .pre(pre) .sn(BigInteger.valueOf(sn + 1)) - .data((List) data) + .data(dataList) .dig(dig) .build(); Serder serder = Eventing.interact(interactArgs); @@ -434,11 +430,11 @@ private InteractionResponse createInteract(HabState hab, Object data) throws Dig return new InteractionResponse(serder, sigs.signatures(), jsondata); } - public EventResult rotate(String name) throws ExecutionException, InterruptedException, DigestException, IOException, LibsodiumException { + public EventResult rotate(String name) throws ExecutionException, InterruptedException, DigestException, IOException, LibsodiumException { return this.rotate(name, RotateIdentifierArgs.builder().build()); } - public EventResult rotate(String name, RotateIdentifierArgs kargs) throws InterruptedException, DigestException, IOException, LibsodiumException { + public EventResult rotate(String name, RotateIdentifierArgs kargs) throws InterruptedException, DigestException, IOException, LibsodiumException { boolean transferable = kargs.getTransferable() != null ? kargs.getTransferable() : true; String ncode = kargs.getNcode() != null ? kargs.getNcode() : MatterCodex.Ed25519_Seed.getValue(); int ncount = kargs.getNcount() != null ? kargs.getNcount() : 1; @@ -522,7 +518,8 @@ public EventResult rotate(String name, RotateIdentifierA jsondata ); - return new EventResult<>(serder, sigs, res, resolveKelOpTypeForRot(hab)); + KelOperation kelOp = Utils.fromJson(res.body(), KelOperation.class); + return new EventResult(serder, sigs, kelOp); } /** From e3e1c7b1cb408de57e33da9b029eaac2cf352d5e Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Tue, 14 Apr 2026 17:58:20 +0700 Subject: [PATCH 10/20] improve operation metadata depends --- build.gradle | 289 --------- ...redentialOperationDependsDeserializer.java | 28 - ...DelegatorOperationDependsDeserializer.java | 28 - .../signify/app/coring/Operations.java | 12 +- .../RegistryOperationDependsDeserializer.java | 28 - .../CompletedCredentialOperationDepends.java | 20 - .../CompletedDelegatorOperationDepends.java | 20 - .../CompletedRegistryOperationDepends.java | 20 - .../model/CredentialOperationDepends.java | 13 - .../model/CredentialOperationMetadata.java | 12 +- .../CredentialOperationMetadataDepends.java | 604 ------------------ .../model/DelegatorOperationDepends.java | 13 - .../model/DelegatorOperationMetadata.java | 12 +- .../PendingCredentialOperationDepends.java | 20 - .../PendingDelegatorOperationDepends.java | 20 - .../PendingRegistryOperationDepends.java | 20 - .../keria/model/RegistryOperationDepends.java | 13 - .../model/RegistryOperationMetadata.java | 20 +- .../RegistryOperationMetadataDepends.java | 274 ++++++++ 19 files changed, 299 insertions(+), 1167 deletions(-) delete mode 100644 src/main/java/org/cardanofoundation/signify/app/coring/CredentialOperationDependsDeserializer.java delete mode 100644 src/main/java/org/cardanofoundation/signify/app/coring/DelegatorOperationDependsDeserializer.java delete mode 100644 src/main/java/org/cardanofoundation/signify/app/coring/RegistryOperationDependsDeserializer.java delete mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedCredentialOperationDepends.java delete mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDelegatorOperationDepends.java delete mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedRegistryOperationDepends.java delete mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationDepends.java delete mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationMetadataDepends.java delete mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationDepends.java delete mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingCredentialOperationDepends.java delete mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDelegatorOperationDepends.java delete mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingRegistryOperationDepends.java delete mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationDepends.java create mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadataDepends.java diff --git a/build.gradle b/build.gradle index db08176b..b11b8fe9 100644 --- a/build.gradle +++ b/build.gradle @@ -334,294 +334,5 @@ public sealed interface KelOperation extends Operation permits ${kelPermits} { } """ - - // Generate RegistryOperationDepends sealed interface + Pending/Completed impls - new File(modelDir, "RegistryOperationDepends.java").text = """\ -package org.cardanofoundation.signify.generated.keria.model; - -/** - * Represents the {@code depends} field of a {@link RegistryOperationMetadata}. - * The dependency is either still pending or already completed. - */ -public sealed interface RegistryOperationDepends - permits PendingRegistryOperationDepends, CompletedRegistryOperationDepends { - - String getName(); - - boolean isDone(); -} -""" - - new File(modelDir, "PendingRegistryOperationDepends.java").text = """\ -package org.cardanofoundation.signify.generated.keria.model; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@JsonIgnoreProperties(ignoreUnknown = true) -public final class PendingRegistryOperationDepends implements RegistryOperationDepends { - - @JsonProperty("name") - private String name; - - @Override - public boolean isDone() { - return false; - } -} -""" - - new File(modelDir, "CompletedRegistryOperationDepends.java").text = """\ -package org.cardanofoundation.signify.generated.keria.model; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@JsonIgnoreProperties(ignoreUnknown = true) -public final class CompletedRegistryOperationDepends implements RegistryOperationDepends { - - @JsonProperty("name") - private String name; - - @Override - public boolean isDone() { - return true; - } -} -""" - - // Patch RegistryOperationMetadata to use typed RegistryOperationDepends with custom deserializer - def registryMetaFile = new File(modelDir, "RegistryOperationMetadata.java") - if (registryMetaFile.exists()) { - def text = registryMetaFile.text - // Add JsonDeserialize import and RegistryOperationDependsDeserializer import - text = text.replace( - "import com.fasterxml.jackson.annotation.JsonCreator;", - "import com.fasterxml.jackson.annotation.JsonCreator;\nimport com.fasterxml.jackson.databind.annotation.JsonDeserialize;\nimport org.cardanofoundation.signify.app.coring.RegistryOperationDependsDeserializer;" - ) - // Change field type from Object to RegistryOperationDepends - text = text.replace("private Object depends = null;", "private RegistryOperationDepends depends = null;") - // Change builder method signature - text = text.replace( - "public RegistryOperationMetadata depends(@jakarta.annotation.Nullable Object depends) {", - "public RegistryOperationMetadata depends(@jakarta.annotation.Nullable RegistryOperationDepends depends) {" - ) - // Change getter return type - text = text.replace("public Object getDepends() {", "public RegistryOperationDepends getDepends() {") - // Change setter parameter type and add @JsonDeserialize - text = text.replace( - "public void setDepends(@jakarta.annotation.Nullable Object depends) {", - "@JsonDeserialize(using = RegistryOperationDependsDeserializer.class)\n public void setDepends(@jakarta.annotation.Nullable RegistryOperationDepends depends) {" - ) - registryMetaFile.text = text - } - - // Generate CredentialOperationDepends sealed interface + Pending/Completed impls - new File(modelDir, "CredentialOperationDepends.java").text = """\ -package org.cardanofoundation.signify.generated.keria.model; - -/** - * Represents the {@code depends} field of a {@link CredentialOperationMetadata}. - * The dependency is either still pending or already completed. - */ -public sealed interface CredentialOperationDepends - permits PendingCredentialOperationDepends, CompletedCredentialOperationDepends { - - String getName(); - - boolean isDone(); -} -""" - - new File(modelDir, "PendingCredentialOperationDepends.java").text = """\ -package org.cardanofoundation.signify.generated.keria.model; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@JsonIgnoreProperties(ignoreUnknown = true) -public final class PendingCredentialOperationDepends implements CredentialOperationDepends { - - @JsonProperty("name") - private String name; - - @Override - public boolean isDone() { - return false; - } -} -""" - - new File(modelDir, "CompletedCredentialOperationDepends.java").text = """\ -package org.cardanofoundation.signify.generated.keria.model; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@JsonIgnoreProperties(ignoreUnknown = true) -public final class CompletedCredentialOperationDepends implements CredentialOperationDepends { - - @JsonProperty("name") - private String name; - - @Override - public boolean isDone() { - return true; - } -} -""" - - // Patch CredentialOperationMetadata to use typed CredentialOperationDepends with custom deserializer - def credentialMetaFile = new File(modelDir, "CredentialOperationMetadata.java") - if (credentialMetaFile.exists()) { - def text = credentialMetaFile.text - // Add JsonDeserialize import and CredentialOperationDependsDeserializer import - text = text.replace( - "import com.fasterxml.jackson.annotation.JsonCreator;", - "import com.fasterxml.jackson.annotation.JsonCreator;\nimport com.fasterxml.jackson.databind.annotation.JsonDeserialize;\nimport org.cardanofoundation.signify.app.coring.CredentialOperationDependsDeserializer;" - ) - // Remove the old CredentialOperationMetadataDepends import (replaced by our sealed interface) - text = text.replace( - "import org.cardanofoundation.signify.generated.keria.model.CredentialOperationMetadataDepends;\n", - "" - ) - // Change field type - text = text.replace( - "private CredentialOperationMetadataDepends depends;", - "private CredentialOperationDepends depends;" - ) - // Change builder method signature - text = text.replace( - "public CredentialOperationMetadata depends(@jakarta.annotation.Nullable CredentialOperationMetadataDepends depends) {", - "public CredentialOperationMetadata depends(@jakarta.annotation.Nullable CredentialOperationDepends depends) {" - ) - // Change getter return type - text = text.replace( - "public CredentialOperationMetadataDepends getDepends() {", - "public CredentialOperationDepends getDepends() {" - ) - // Change setter parameter type and add @JsonDeserialize - text = text.replace( - "public void setDepends(@jakarta.annotation.Nullable CredentialOperationMetadataDepends depends) {", - "@JsonDeserialize(using = CredentialOperationDependsDeserializer.class)\n public void setDepends(@jakarta.annotation.Nullable CredentialOperationDepends depends) {" - ) - credentialMetaFile.text = text - } - - // Generate DelegatorOperationDepends sealed interface + Pending/Completed impls - new File(modelDir, "DelegatorOperationDepends.java").text = """\ -package org.cardanofoundation.signify.generated.keria.model; - -/** - * Represents the {@code depends} field of a {@link DelegatorOperationMetadata}. - * The dependency is either still pending or already completed. - */ -public sealed interface DelegatorOperationDepends - permits PendingDelegatorOperationDepends, CompletedDelegatorOperationDepends { - - String getName(); - - boolean isDone(); -} -""" - - new File(modelDir, "PendingDelegatorOperationDepends.java").text = """\ -package org.cardanofoundation.signify.generated.keria.model; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@JsonIgnoreProperties(ignoreUnknown = true) -public final class PendingDelegatorOperationDepends implements DelegatorOperationDepends { - - @JsonProperty("name") - private String name; - - @Override - public boolean isDone() { - return false; - } -} -""" - - new File(modelDir, "CompletedDelegatorOperationDepends.java").text = """\ -package org.cardanofoundation.signify.generated.keria.model; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@JsonIgnoreProperties(ignoreUnknown = true) -public final class CompletedDelegatorOperationDepends implements DelegatorOperationDepends { - - @JsonProperty("name") - private String name; - - @Override - public boolean isDone() { - return true; - } -} -""" - - // Patch DelegatorOperationMetadata to use typed DelegatorOperationDepends with custom deserializer - def delegatorMetaFile = new File(modelDir, "DelegatorOperationMetadata.java") - if (delegatorMetaFile.exists()) { - def text = delegatorMetaFile.text - // Add JsonDeserialize import and DelegatorOperationDependsDeserializer import - text = text.replace( - "import com.fasterxml.jackson.annotation.JsonCreator;", - "import com.fasterxml.jackson.annotation.JsonCreator;\nimport com.fasterxml.jackson.databind.annotation.JsonDeserialize;\nimport org.cardanofoundation.signify.app.coring.DelegatorOperationDependsDeserializer;" - ) - // Remove the old DelegatorOperationMetadataDepends import (replaced by our sealed interface) - text = text.replace( - "import org.cardanofoundation.signify.generated.keria.model.DelegatorOperationMetadataDepends;\n", - "" - ) - // Change field type - text = text.replace( - "private DelegatorOperationMetadataDepends depends;", - "private DelegatorOperationDepends depends;" - ) - // Change builder method signature - text = text.replace( - "public DelegatorOperationMetadata depends(@jakarta.annotation.Nullable DelegatorOperationMetadataDepends depends) {", - "public DelegatorOperationMetadata depends(@jakarta.annotation.Nullable DelegatorOperationDepends depends) {" - ) - // Change getter return type - text = text.replace( - "public DelegatorOperationMetadataDepends getDepends() {", - "public DelegatorOperationDepends getDepends() {" - ) - // Change setter parameter type and add @JsonDeserialize - text = text.replace( - "public void setDepends(@jakarta.annotation.Nullable DelegatorOperationMetadataDepends depends) {", - "@JsonDeserialize(using = DelegatorOperationDependsDeserializer.class)\n public void setDepends(@jakarta.annotation.Nullable DelegatorOperationDepends depends) {" - ) - delegatorMetaFile.text = text - } } } \ No newline at end of file diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/CredentialOperationDependsDeserializer.java b/src/main/java/org/cardanofoundation/signify/app/coring/CredentialOperationDependsDeserializer.java deleted file mode 100644 index 2d669c57..00000000 --- a/src/main/java/org/cardanofoundation/signify/app/coring/CredentialOperationDependsDeserializer.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.cardanofoundation.signify.app.coring; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonDeserializer; -import com.fasterxml.jackson.databind.JsonNode; -import org.cardanofoundation.signify.generated.keria.model.CompletedCredentialOperationDepends; -import org.cardanofoundation.signify.generated.keria.model.CredentialOperationDepends; -import org.cardanofoundation.signify.generated.keria.model.PendingCredentialOperationDepends; - -import java.io.IOException; - -public class CredentialOperationDependsDeserializer extends JsonDeserializer { - - @Override - public CredentialOperationDepends deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - JsonNode node = p.readValueAsTree(); - - boolean done = node.has("done") && node.get("done").asBoolean(false); - Class target = done - ? CompletedCredentialOperationDepends.class - : PendingCredentialOperationDepends.class; - - JsonParser nodeParser = node.traverse(p.getCodec()); - nodeParser.nextToken(); - return ctxt.readValue(nodeParser, target); - } -} diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/DelegatorOperationDependsDeserializer.java b/src/main/java/org/cardanofoundation/signify/app/coring/DelegatorOperationDependsDeserializer.java deleted file mode 100644 index 38d85043..00000000 --- a/src/main/java/org/cardanofoundation/signify/app/coring/DelegatorOperationDependsDeserializer.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.cardanofoundation.signify.app.coring; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonDeserializer; -import com.fasterxml.jackson.databind.JsonNode; -import org.cardanofoundation.signify.generated.keria.model.CompletedDelegatorOperationDepends; -import org.cardanofoundation.signify.generated.keria.model.DelegatorOperationDepends; -import org.cardanofoundation.signify.generated.keria.model.PendingDelegatorOperationDepends; - -import java.io.IOException; - -public class DelegatorOperationDependsDeserializer extends JsonDeserializer { - - @Override - public DelegatorOperationDepends deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - JsonNode node = p.readValueAsTree(); - - boolean done = node.has("done") && node.get("done").asBoolean(false); - Class target = done - ? CompletedDelegatorOperationDepends.class - : PendingDelegatorOperationDepends.class; - - JsonParser nodeParser = node.traverse(p.getCodec()); - nodeParser.nextToken(); - return ctxt.readValue(nodeParser, target); - } -} diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java b/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java index 11cf001b..fa30390d 100644 --- a/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java +++ b/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java @@ -165,14 +165,14 @@ private static boolean isDone(Operation op) { private void waitOnDepends(Operation operation, WaitOptions options, long startingTime) throws IOException, InterruptedException, LibsodiumException { String depName = switch (operation) { case DelegatorOperation op when op.getMetadata() != null - && op.getMetadata().getDepends() != null - && !op.getMetadata().getDepends().isDone() -> op.getMetadata().getDepends().getName(); + && op.getMetadata().getDepends() != null + && (op.getMetadata().getDepends().getDone() == null || !Boolean.TRUE.equals(op.getMetadata().getDepends().getDone().getValue())) -> op.getMetadata().getDepends().getName(); case RegistryOperation op when op.getMetadata() != null - && op.getMetadata().getDepends() != null - && !op.getMetadata().getDepends().isDone() -> op.getMetadata().getDepends().getName(); + && op.getMetadata().getDepends() != null + && (op.getMetadata().getDepends().getDone() == null || !Boolean.TRUE.equals(op.getMetadata().getDepends().getDone().getValue())) -> op.getMetadata().getDepends().getName(); case CredentialOperation op when op.getMetadata() != null - && op.getMetadata().getDepends() != null - && !op.getMetadata().getDepends().isDone() -> op.getMetadata().getDepends().getName(); + && op.getMetadata().getDepends() != null + && (op.getMetadata().getDepends().getDone() == null || !Boolean.TRUE.equals(op.getMetadata().getDepends().getDone().getValue())) -> op.getMetadata().getDepends().getName(); default -> null; }; diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/RegistryOperationDependsDeserializer.java b/src/main/java/org/cardanofoundation/signify/app/coring/RegistryOperationDependsDeserializer.java deleted file mode 100644 index a5a02293..00000000 --- a/src/main/java/org/cardanofoundation/signify/app/coring/RegistryOperationDependsDeserializer.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.cardanofoundation.signify.app.coring; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonDeserializer; -import com.fasterxml.jackson.databind.JsonNode; -import org.cardanofoundation.signify.generated.keria.model.CompletedRegistryOperationDepends; -import org.cardanofoundation.signify.generated.keria.model.PendingRegistryOperationDepends; -import org.cardanofoundation.signify.generated.keria.model.RegistryOperationDepends; - -import java.io.IOException; - -public class RegistryOperationDependsDeserializer extends JsonDeserializer { - - @Override - public RegistryOperationDepends deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - JsonNode node = p.readValueAsTree(); - - boolean done = node.has("done") && node.get("done").asBoolean(false); - Class target = done - ? CompletedRegistryOperationDepends.class - : PendingRegistryOperationDepends.class; - - JsonParser nodeParser = node.traverse(p.getCodec()); - nodeParser.nextToken(); - return ctxt.readValue(nodeParser, target); - } -} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedCredentialOperationDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedCredentialOperationDepends.java deleted file mode 100644 index b79897b1..00000000 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedCredentialOperationDepends.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.cardanofoundation.signify.generated.keria.model; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@JsonIgnoreProperties(ignoreUnknown = true) -public final class CompletedCredentialOperationDepends implements CredentialOperationDepends { - - @JsonProperty("name") - private String name; - - @Override - public boolean isDone() { - return true; - } -} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDelegatorOperationDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDelegatorOperationDepends.java deleted file mode 100644 index 01b13c7b..00000000 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedDelegatorOperationDepends.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.cardanofoundation.signify.generated.keria.model; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@JsonIgnoreProperties(ignoreUnknown = true) -public final class CompletedDelegatorOperationDepends implements DelegatorOperationDepends { - - @JsonProperty("name") - private String name; - - @Override - public boolean isDone() { - return true; - } -} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedRegistryOperationDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedRegistryOperationDepends.java deleted file mode 100644 index 92b9166d..00000000 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CompletedRegistryOperationDepends.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.cardanofoundation.signify.generated.keria.model; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@JsonIgnoreProperties(ignoreUnknown = true) -public final class CompletedRegistryOperationDepends implements RegistryOperationDepends { - - @JsonProperty("name") - private String name; - - @Override - public boolean isDone() { - return true; - } -} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationDepends.java deleted file mode 100644 index 653f4173..00000000 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationDepends.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.cardanofoundation.signify.generated.keria.model; - -/** - * Represents the {@code depends} field of a {@link CredentialOperationMetadata}. - * The dependency is either still pending or already completed. - */ -public sealed interface CredentialOperationDepends - permits PendingCredentialOperationDepends, CompletedCredentialOperationDepends { - - String getName(); - - boolean isDone(); -} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationMetadata.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationMetadata.java index bc50a182..06d4202c 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationMetadata.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationMetadata.java @@ -18,11 +18,10 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import org.cardanofoundation.signify.app.coring.CredentialOperationDependsDeserializer; import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonValue; import org.cardanofoundation.signify.generated.keria.model.CredentialSad; +import org.cardanofoundation.signify.generated.keria.model.RegistryOperationMetadataDepends; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonTypeName; @@ -41,7 +40,7 @@ public class CredentialOperationMetadata { public static final String JSON_PROPERTY_DEPENDS = "depends"; @jakarta.annotation.Nullable - private CredentialOperationDepends depends; + private RegistryOperationMetadataDepends depends; public CredentialOperationMetadata() { } @@ -71,7 +70,7 @@ public void setCed(@jakarta.annotation.Nonnull CredentialSad ced) { this.ced = ced; } - public CredentialOperationMetadata depends(@jakarta.annotation.Nullable CredentialOperationDepends depends) { + public CredentialOperationMetadata depends(@jakarta.annotation.Nullable RegistryOperationMetadataDepends depends) { this.depends = depends; return this; @@ -85,15 +84,14 @@ public CredentialOperationMetadata depends(@jakarta.annotation.Nullable Credenti @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public CredentialOperationDepends getDepends() { + public RegistryOperationMetadataDepends getDepends() { return depends; } @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - @JsonDeserialize(using = CredentialOperationDependsDeserializer.class) - public void setDepends(@jakarta.annotation.Nullable CredentialOperationDepends depends) { + public void setDepends(@jakarta.annotation.Nullable RegistryOperationMetadataDepends depends) { this.depends = depends; } diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationMetadataDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationMetadataDepends.java deleted file mode 100644 index f5f5076a..00000000 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationMetadataDepends.java +++ /dev/null @@ -1,604 +0,0 @@ -/* - * KERIA Interactive Web Interface API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 1.0.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -package org.cardanofoundation.signify.generated.keria.model; - -import java.util.Objects; -import java.util.Arrays; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.annotation.JsonValue; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import org.cardanofoundation.signify.generated.keria.model.DRTV1; -import org.cardanofoundation.signify.generated.keria.model.DRTV2; -import org.cardanofoundation.signify.generated.keria.model.ICPV1Kt; -import org.cardanofoundation.signify.generated.keria.model.IXNV1; -import org.cardanofoundation.signify.generated.keria.model.IXNV2; -import org.cardanofoundation.signify.generated.keria.model.ROTV1; -import org.cardanofoundation.signify.generated.keria.model.ROTV2; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonTypeName; - -/** - * CredentialOperationMetadataDepends - */ -@JsonPropertyOrder({ - CredentialOperationMetadataDepends.JSON_PROPERTY_V, - CredentialOperationMetadataDepends.JSON_PROPERTY_T, - CredentialOperationMetadataDepends.JSON_PROPERTY_D, - CredentialOperationMetadataDepends.JSON_PROPERTY_I, - CredentialOperationMetadataDepends.JSON_PROPERTY_S, - CredentialOperationMetadataDepends.JSON_PROPERTY_P, - CredentialOperationMetadataDepends.JSON_PROPERTY_KT, - CredentialOperationMetadataDepends.JSON_PROPERTY_K, - CredentialOperationMetadataDepends.JSON_PROPERTY_NT, - CredentialOperationMetadataDepends.JSON_PROPERTY_N, - CredentialOperationMetadataDepends.JSON_PROPERTY_BT, - CredentialOperationMetadataDepends.JSON_PROPERTY_BR, - CredentialOperationMetadataDepends.JSON_PROPERTY_BA, - CredentialOperationMetadataDepends.JSON_PROPERTY_A, - CredentialOperationMetadataDepends.JSON_PROPERTY_C -}) -@JsonTypeName("CredentialOperationMetadata_depends") -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class CredentialOperationMetadataDepends { - public static final String JSON_PROPERTY_V = "v"; - @jakarta.annotation.Nonnull - private String v; - - public static final String JSON_PROPERTY_T = "t"; - @jakarta.annotation.Nonnull - private String t; - - public static final String JSON_PROPERTY_D = "d"; - @jakarta.annotation.Nonnull - private String d; - - public static final String JSON_PROPERTY_I = "i"; - @jakarta.annotation.Nonnull - private String i; - - public static final String JSON_PROPERTY_S = "s"; - @jakarta.annotation.Nonnull - private String s; - - public static final String JSON_PROPERTY_P = "p"; - @jakarta.annotation.Nonnull - private String p; - - public static final String JSON_PROPERTY_KT = "kt"; - @jakarta.annotation.Nonnull - private ICPV1Kt kt; - - public static final String JSON_PROPERTY_K = "k"; - @jakarta.annotation.Nonnull - private List k; - - public static final String JSON_PROPERTY_NT = "nt"; - @jakarta.annotation.Nonnull - private ICPV1Kt nt; - - public static final String JSON_PROPERTY_N = "n"; - @jakarta.annotation.Nonnull - private List n; - - public static final String JSON_PROPERTY_BT = "bt"; - @jakarta.annotation.Nonnull - private String bt; - - public static final String JSON_PROPERTY_BR = "br"; - @jakarta.annotation.Nonnull - private List br; - - public static final String JSON_PROPERTY_BA = "ba"; - @jakarta.annotation.Nonnull - private List ba; - - public static final String JSON_PROPERTY_A = "a"; - @jakarta.annotation.Nullable - private Object a = null; - - public static final String JSON_PROPERTY_C = "c"; - @jakarta.annotation.Nonnull - private List c; - - public CredentialOperationMetadataDepends() { - } - - public CredentialOperationMetadataDepends v(@jakarta.annotation.Nonnull String v) { - - this.v = v; - return this; - } - - /** - * Get v - * @return v - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_V, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getV() { - return v; - } - - - @JsonProperty(value = JSON_PROPERTY_V, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setV(@jakarta.annotation.Nonnull String v) { - this.v = v; - } - - public CredentialOperationMetadataDepends t(@jakarta.annotation.Nonnull String t) { - - this.t = t; - return this; - } - - /** - * Get t - * @return t - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_T, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getT() { - return t; - } - - - @JsonProperty(value = JSON_PROPERTY_T, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setT(@jakarta.annotation.Nonnull String t) { - this.t = t; - } - - public CredentialOperationMetadataDepends d(@jakarta.annotation.Nonnull String d) { - - this.d = d; - return this; - } - - /** - * Get d - * @return d - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_D, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getD() { - return d; - } - - - @JsonProperty(value = JSON_PROPERTY_D, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setD(@jakarta.annotation.Nonnull String d) { - this.d = d; - } - - public CredentialOperationMetadataDepends i(@jakarta.annotation.Nonnull String i) { - - this.i = i; - return this; - } - - /** - * Get i - * @return i - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_I, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getI() { - return i; - } - - - @JsonProperty(value = JSON_PROPERTY_I, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setI(@jakarta.annotation.Nonnull String i) { - this.i = i; - } - - public CredentialOperationMetadataDepends s(@jakarta.annotation.Nonnull String s) { - - this.s = s; - return this; - } - - /** - * Get s - * @return s - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_S, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getS() { - return s; - } - - - @JsonProperty(value = JSON_PROPERTY_S, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setS(@jakarta.annotation.Nonnull String s) { - this.s = s; - } - - public CredentialOperationMetadataDepends p(@jakarta.annotation.Nonnull String p) { - - this.p = p; - return this; - } - - /** - * Get p - * @return p - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_P, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getP() { - return p; - } - - - @JsonProperty(value = JSON_PROPERTY_P, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setP(@jakarta.annotation.Nonnull String p) { - this.p = p; - } - - public CredentialOperationMetadataDepends kt(@jakarta.annotation.Nonnull ICPV1Kt kt) { - - this.kt = kt; - return this; - } - - /** - * Get kt - * @return kt - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_KT, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public ICPV1Kt getKt() { - return kt; - } - - - @JsonProperty(value = JSON_PROPERTY_KT, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setKt(@jakarta.annotation.Nonnull ICPV1Kt kt) { - this.kt = kt; - } - - public CredentialOperationMetadataDepends k(@jakarta.annotation.Nonnull List k) { - - this.k = k; - return this; - } - - public CredentialOperationMetadataDepends addKItem(String kItem) { - if (this.k == null) { - this.k = new ArrayList<>(); - } - this.k.add(kItem); - return this; - } - - /** - * Get k - * @return k - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_K, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public List getK() { - return k; - } - - - @JsonProperty(value = JSON_PROPERTY_K, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setK(@jakarta.annotation.Nonnull List k) { - this.k = k; - } - - public CredentialOperationMetadataDepends nt(@jakarta.annotation.Nonnull ICPV1Kt nt) { - - this.nt = nt; - return this; - } - - /** - * Get nt - * @return nt - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_NT, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public ICPV1Kt getNt() { - return nt; - } - - - @JsonProperty(value = JSON_PROPERTY_NT, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setNt(@jakarta.annotation.Nonnull ICPV1Kt nt) { - this.nt = nt; - } - - public CredentialOperationMetadataDepends n(@jakarta.annotation.Nonnull List n) { - - this.n = n; - return this; - } - - public CredentialOperationMetadataDepends addNItem(String nItem) { - if (this.n == null) { - this.n = new ArrayList<>(); - } - this.n.add(nItem); - return this; - } - - /** - * Get n - * @return n - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_N, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public List getN() { - return n; - } - - - @JsonProperty(value = JSON_PROPERTY_N, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setN(@jakarta.annotation.Nonnull List n) { - this.n = n; - } - - public CredentialOperationMetadataDepends bt(@jakarta.annotation.Nonnull String bt) { - - this.bt = bt; - return this; - } - - /** - * Get bt - * @return bt - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_BT, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getBt() { - return bt; - } - - - @JsonProperty(value = JSON_PROPERTY_BT, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setBt(@jakarta.annotation.Nonnull String bt) { - this.bt = bt; - } - - public CredentialOperationMetadataDepends br(@jakarta.annotation.Nonnull List br) { - - this.br = br; - return this; - } - - public CredentialOperationMetadataDepends addBrItem(String brItem) { - if (this.br == null) { - this.br = new ArrayList<>(); - } - this.br.add(brItem); - return this; - } - - /** - * Get br - * @return br - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_BR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public List getBr() { - return br; - } - - - @JsonProperty(value = JSON_PROPERTY_BR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setBr(@jakarta.annotation.Nonnull List br) { - this.br = br; - } - - public CredentialOperationMetadataDepends ba(@jakarta.annotation.Nonnull List ba) { - - this.ba = ba; - return this; - } - - public CredentialOperationMetadataDepends addBaItem(String baItem) { - if (this.ba == null) { - this.ba = new ArrayList<>(); - } - this.ba.add(baItem); - return this; - } - - /** - * Get ba - * @return ba - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_BA, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public List getBa() { - return ba; - } - - - @JsonProperty(value = JSON_PROPERTY_BA, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setBa(@jakarta.annotation.Nonnull List ba) { - this.ba = ba; - } - - public CredentialOperationMetadataDepends a(@jakarta.annotation.Nullable Object a) { - - this.a = a; - return this; - } - - /** - * Get a - * @return a - */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_A, required = false) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public Object getA() { - return a; - } - - - @JsonProperty(value = JSON_PROPERTY_A, required = false) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setA(@jakarta.annotation.Nullable Object a) { - this.a = a; - } - - public CredentialOperationMetadataDepends c(@jakarta.annotation.Nonnull List c) { - - this.c = c; - return this; - } - - public CredentialOperationMetadataDepends addCItem(String cItem) { - if (this.c == null) { - this.c = new ArrayList<>(); - } - this.c.add(cItem); - return this; - } - - /** - * Get c - * @return c - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_C, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public List getC() { - return c; - } - - - @JsonProperty(value = JSON_PROPERTY_C, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setC(@jakarta.annotation.Nonnull List c) { - this.c = c; - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - CredentialOperationMetadataDepends credentialOperationMetadataDepends = (CredentialOperationMetadataDepends) o; - return Objects.equals(this.v, credentialOperationMetadataDepends.v) && - Objects.equals(this.t, credentialOperationMetadataDepends.t) && - Objects.equals(this.d, credentialOperationMetadataDepends.d) && - Objects.equals(this.i, credentialOperationMetadataDepends.i) && - Objects.equals(this.s, credentialOperationMetadataDepends.s) && - Objects.equals(this.p, credentialOperationMetadataDepends.p) && - Objects.equals(this.kt, credentialOperationMetadataDepends.kt) && - Objects.equals(this.k, credentialOperationMetadataDepends.k) && - Objects.equals(this.nt, credentialOperationMetadataDepends.nt) && - Objects.equals(this.n, credentialOperationMetadataDepends.n) && - Objects.equals(this.bt, credentialOperationMetadataDepends.bt) && - Objects.equals(this.br, credentialOperationMetadataDepends.br) && - Objects.equals(this.ba, credentialOperationMetadataDepends.ba) && - Objects.equals(this.a, credentialOperationMetadataDepends.a) && - Objects.equals(this.c, credentialOperationMetadataDepends.c); - } - - @Override - public int hashCode() { - return Objects.hash(v, t, d, i, s, p, kt, k, nt, n, bt, br, ba, a, c); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class CredentialOperationMetadataDepends {\n"); - sb.append(" v: ").append(toIndentedString(v)).append("\n"); - sb.append(" t: ").append(toIndentedString(t)).append("\n"); - sb.append(" d: ").append(toIndentedString(d)).append("\n"); - sb.append(" i: ").append(toIndentedString(i)).append("\n"); - sb.append(" s: ").append(toIndentedString(s)).append("\n"); - sb.append(" p: ").append(toIndentedString(p)).append("\n"); - sb.append(" kt: ").append(toIndentedString(kt)).append("\n"); - sb.append(" k: ").append(toIndentedString(k)).append("\n"); - sb.append(" nt: ").append(toIndentedString(nt)).append("\n"); - sb.append(" n: ").append(toIndentedString(n)).append("\n"); - sb.append(" bt: ").append(toIndentedString(bt)).append("\n"); - sb.append(" br: ").append(toIndentedString(br)).append("\n"); - sb.append(" ba: ").append(toIndentedString(ba)).append("\n"); - sb.append(" a: ").append(toIndentedString(a)).append("\n"); - sb.append(" c: ").append(toIndentedString(c)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } - -} - diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationDepends.java deleted file mode 100644 index abaef802..00000000 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationDepends.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.cardanofoundation.signify.generated.keria.model; - -/** - * Represents the {@code depends} field of a {@link DelegatorOperationMetadata}. - * The dependency is either still pending or already completed. - */ -public sealed interface DelegatorOperationDepends - permits PendingDelegatorOperationDepends, CompletedDelegatorOperationDepends { - - String getName(); - - boolean isDone(); -} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadata.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadata.java index 8cf4ccb5..b0ec8d73 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadata.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadata.java @@ -18,11 +18,10 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import org.cardanofoundation.signify.app.coring.DelegatorOperationDependsDeserializer; import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonValue; import org.cardanofoundation.signify.generated.keria.model.Anchor; +import org.cardanofoundation.signify.generated.keria.model.DelegatorOperationMetadataDepends; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonTypeName; @@ -51,7 +50,7 @@ public class DelegatorOperationMetadata { public static final String JSON_PROPERTY_DEPENDS = "depends"; @jakarta.annotation.Nullable - private DelegatorOperationDepends depends; + private DelegatorOperationMetadataDepends depends; public DelegatorOperationMetadata() { } @@ -131,7 +130,7 @@ public void setAnchor(@jakarta.annotation.Nullable Anchor anchor) { this.anchor = anchor; } - public DelegatorOperationMetadata depends(@jakarta.annotation.Nullable DelegatorOperationDepends depends) { + public DelegatorOperationMetadata depends(@jakarta.annotation.Nullable DelegatorOperationMetadataDepends depends) { this.depends = depends; return this; @@ -145,15 +144,14 @@ public DelegatorOperationMetadata depends(@jakarta.annotation.Nullable Delegator @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public DelegatorOperationDepends getDepends() { + public DelegatorOperationMetadataDepends getDepends() { return depends; } @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - @JsonDeserialize(using = DelegatorOperationDependsDeserializer.class) - public void setDepends(@jakarta.annotation.Nullable DelegatorOperationDepends depends) { + public void setDepends(@jakarta.annotation.Nullable DelegatorOperationMetadataDepends depends) { this.depends = depends; } diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingCredentialOperationDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingCredentialOperationDepends.java deleted file mode 100644 index 35efa5f0..00000000 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingCredentialOperationDepends.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.cardanofoundation.signify.generated.keria.model; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@JsonIgnoreProperties(ignoreUnknown = true) -public final class PendingCredentialOperationDepends implements CredentialOperationDepends { - - @JsonProperty("name") - private String name; - - @Override - public boolean isDone() { - return false; - } -} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDelegatorOperationDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDelegatorOperationDepends.java deleted file mode 100644 index 48a8b430..00000000 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingDelegatorOperationDepends.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.cardanofoundation.signify.generated.keria.model; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@JsonIgnoreProperties(ignoreUnknown = true) -public final class PendingDelegatorOperationDepends implements DelegatorOperationDepends { - - @JsonProperty("name") - private String name; - - @Override - public boolean isDone() { - return false; - } -} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingRegistryOperationDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingRegistryOperationDepends.java deleted file mode 100644 index fb837067..00000000 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/PendingRegistryOperationDepends.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.cardanofoundation.signify.generated.keria.model; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@JsonIgnoreProperties(ignoreUnknown = true) -public final class PendingRegistryOperationDepends implements RegistryOperationDepends { - - @JsonProperty("name") - private String name; - - @Override - public boolean isDone() { - return false; - } -} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationDepends.java deleted file mode 100644 index cd2efdfb..00000000 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationDepends.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.cardanofoundation.signify.generated.keria.model; - -/** - * Represents the {@code depends} field of a {@link RegistryOperationMetadata}. - * The dependency is either still pending or already completed. - */ -public sealed interface RegistryOperationDepends - permits PendingRegistryOperationDepends, CompletedRegistryOperationDepends { - - String getName(); - - boolean isDone(); -} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadata.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadata.java index 146a3dbd..f255843d 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadata.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadata.java @@ -18,11 +18,10 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import org.cardanofoundation.signify.app.coring.RegistryOperationDependsDeserializer; import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonValue; import org.cardanofoundation.signify.generated.keria.model.Anchor; +import org.cardanofoundation.signify.generated.keria.model.RegistryOperationMetadataDepends; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonTypeName; @@ -41,8 +40,8 @@ public class RegistryOperationMetadata { private String pre; public static final String JSON_PROPERTY_DEPENDS = "depends"; - @jakarta.annotation.Nullable - private RegistryOperationDepends depends = null; + @jakarta.annotation.Nonnull + private RegistryOperationMetadataDepends depends; public static final String JSON_PROPERTY_ANCHOR = "anchor"; @jakarta.annotation.Nonnull @@ -76,7 +75,7 @@ public void setPre(@jakarta.annotation.Nonnull String pre) { this.pre = pre; } - public RegistryOperationMetadata depends(@jakarta.annotation.Nullable RegistryOperationDepends depends) { + public RegistryOperationMetadata depends(@jakarta.annotation.Nonnull RegistryOperationMetadataDepends depends) { this.depends = depends; return this; @@ -86,19 +85,18 @@ public RegistryOperationMetadata depends(@jakarta.annotation.Nullable RegistryOp * Get depends * @return depends */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = false) + @jakarta.annotation.Nonnull + @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = true) @JsonInclude(value = JsonInclude.Include.ALWAYS) - public RegistryOperationDepends getDepends() { + public RegistryOperationMetadataDepends getDepends() { return depends; } - @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = false) + @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = true) @JsonInclude(value = JsonInclude.Include.ALWAYS) - @JsonDeserialize(using = RegistryOperationDependsDeserializer.class) - public void setDepends(@jakarta.annotation.Nullable RegistryOperationDepends depends) { + public void setDepends(@jakarta.annotation.Nonnull RegistryOperationMetadataDepends depends) { this.depends = depends; } diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadataDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadataDepends.java new file mode 100644 index 00000000..9666df4f --- /dev/null +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadataDepends.java @@ -0,0 +1,274 @@ +/* + * KERIA Interactive Web Interface API + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.1 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.cardanofoundation.signify.generated.keria.model; + +import java.util.Objects; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import org.cardanofoundation.signify.generated.keria.model.CompletedDelegationOperationResponse; +import org.cardanofoundation.signify.generated.keria.model.DelegationMetadata; +import org.cardanofoundation.signify.generated.keria.model.DelegationOperation; +import org.cardanofoundation.signify.generated.keria.model.DoneOperation; +import org.cardanofoundation.signify.generated.keria.model.GroupOperation; +import org.cardanofoundation.signify.generated.keria.model.OperationStatus; +import org.cardanofoundation.signify.generated.keria.model.WitnessOperation; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonTypeName; + +/** + * RegistryOperationMetadataDepends + */ +@JsonPropertyOrder({ + RegistryOperationMetadataDepends.JSON_PROPERTY_NAME, + RegistryOperationMetadataDepends.JSON_PROPERTY_METADATA, + RegistryOperationMetadataDepends.JSON_PROPERTY_DONE, + RegistryOperationMetadataDepends.JSON_PROPERTY_ERROR, + RegistryOperationMetadataDepends.JSON_PROPERTY_RESPONSE +}) +@JsonTypeName("RegistryOperationMetadata_depends") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") +public class RegistryOperationMetadataDepends { + public static final String JSON_PROPERTY_NAME = "name"; + @jakarta.annotation.Nonnull + private String name; + + public static final String JSON_PROPERTY_METADATA = "metadata"; + @jakarta.annotation.Nullable + private DelegationMetadata metadata; + + /** + * Gets or Sets done + */ + public enum DoneEnum { + TRUE(Boolean.valueOf("true")); + + private Boolean value; + + DoneEnum(Boolean value) { + this.value = value; + } + + @JsonValue + public Boolean getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static DoneEnum fromValue(Boolean value) { + for (DoneEnum b : DoneEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + } + + public static final String JSON_PROPERTY_DONE = "done"; + @jakarta.annotation.Nonnull + private DoneEnum done; + + public static final String JSON_PROPERTY_ERROR = "error"; + @jakarta.annotation.Nonnull + private OperationStatus error; + + public static final String JSON_PROPERTY_RESPONSE = "response"; + @jakarta.annotation.Nonnull + private CompletedDelegationOperationResponse response; + + public RegistryOperationMetadataDepends() { + } + + public RegistryOperationMetadataDepends name(@jakarta.annotation.Nonnull String name) { + + this.name = name; + return this; + } + + /** + * Get name + * @return name + */ + @jakarta.annotation.Nonnull + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public String getName() { + return name; + } + + + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setName(@jakarta.annotation.Nonnull String name) { + this.name = name; + } + + public RegistryOperationMetadataDepends metadata(@jakarta.annotation.Nullable DelegationMetadata metadata) { + + this.metadata = metadata; + return this; + } + + /** + * Get metadata + * @return metadata + */ + @jakarta.annotation.Nullable + @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public DelegationMetadata getMetadata() { + return metadata; + } + + + @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setMetadata(@jakarta.annotation.Nullable DelegationMetadata metadata) { + this.metadata = metadata; + } + + public RegistryOperationMetadataDepends done(@jakarta.annotation.Nonnull DoneEnum done) { + + this.done = done; + return this; + } + + /** + * Get done + * @return done + */ + @jakarta.annotation.Nonnull + @JsonProperty(value = JSON_PROPERTY_DONE, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public DoneEnum getDone() { + return done; + } + + + @JsonProperty(value = JSON_PROPERTY_DONE, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setDone(@jakarta.annotation.Nonnull DoneEnum done) { + this.done = done; + } + + public RegistryOperationMetadataDepends error(@jakarta.annotation.Nonnull OperationStatus error) { + + this.error = error; + return this; + } + + /** + * Get error + * @return error + */ + @jakarta.annotation.Nonnull + @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public OperationStatus getError() { + return error; + } + + + @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setError(@jakarta.annotation.Nonnull OperationStatus error) { + this.error = error; + } + + public RegistryOperationMetadataDepends response(@jakarta.annotation.Nonnull CompletedDelegationOperationResponse response) { + + this.response = response; + return this; + } + + /** + * Get response + * @return response + */ + @jakarta.annotation.Nonnull + @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public CompletedDelegationOperationResponse getResponse() { + return response; + } + + + @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setResponse(@jakarta.annotation.Nonnull CompletedDelegationOperationResponse response) { + this.response = response; + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RegistryOperationMetadataDepends registryOperationMetadataDepends = (RegistryOperationMetadataDepends) o; + return Objects.equals(this.name, registryOperationMetadataDepends.name) && + Objects.equals(this.metadata, registryOperationMetadataDepends.metadata) && + Objects.equals(this.done, registryOperationMetadataDepends.done) && + Objects.equals(this.error, registryOperationMetadataDepends.error) && + Objects.equals(this.response, registryOperationMetadataDepends.response); + } + + @Override + public int hashCode() { + return Objects.hash(name, metadata, done, error, response); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RegistryOperationMetadataDepends {\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); + sb.append(" done: ").append(toIndentedString(done)).append("\n"); + sb.append(" error: ").append(toIndentedString(error)).append("\n"); + sb.append(" response: ").append(toIndentedString(response)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + +} + From 27b2259783ceae8ea151fe4416044ad7980ef559 Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Wed, 15 Apr 2026 14:49:51 +0700 Subject: [PATCH 11/20] improve types in some identifier actions --- .../app/aiding/IdentifierController.java | 43 +------------------ .../signify/e2e/utils/TestUtils.java | 3 +- 2 files changed, 2 insertions(+), 44 deletions(-) diff --git a/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java b/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java index 15c3bdc6..a8d40630 100644 --- a/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java +++ b/src/main/java/org/cardanofoundation/signify/app/aiding/IdentifierController.java @@ -345,9 +345,7 @@ private Serder makeEndRole(String pre, String role, String eid, String stamp) th } public EventResult interact(String name, Object data) throws InterruptedException, DigestException, IOException, LibsodiumException { - HabState hab = this.get(name) - .orElseThrow(() -> new IllegalArgumentException("Identifier not found: " + name)); - InteractionResponse interactionResponse = this.createInteract(hab, data); + InteractionResponse interactionResponse = this.createInteract(name, data); HttpResponse response = this.client.fetch( "/identifiers/" + name + "/events", "POST", @@ -357,48 +355,9 @@ public EventResult interact(String name, Object data) throws Inter return new EventResult(interactionResponse.serder(), interactionResponse.sigs(), kelOp); } - /** - * Resolve the expected KERIA operation type for an interaction (IXN) event. - */ - static KelOperation resolveKelOpTypeForIxn(HabState hab) { - if (hab.getGroup() != null) { - return new PendingGroupOperation(); - } - KeyStateRecord state = hab.getState(); - if (state != null && state.getB() != null && !state.getB().isEmpty()) { - return new PendingWitnessOperation(); - } - return new PendingDoneOperation(); - } - - /** - * Resolve the expected KERIA operation type for a rotation (ROT/DRT) event. - */ - static KelOperation resolveKelOpTypeForRot(HabState hab) { - if (hab.getGroup() != null) { - return new PendingGroupOperation(); - } - KeyStateRecord state = hab.getState(); - if (state != null && state.getDi() != null && !state.getDi().isEmpty()) { - return new PendingDelegationOperation(); - } - if (state != null && state.getB() != null && !state.getB().isEmpty()) { - return new PendingWitnessOperation(); - } - return new PendingDoneOperation(); - } - - /** - * Resolve the expected KERIA operation type for an inception (ICP/DIP) event. - */ - public InteractionResponse createInteract(String name, Object data) throws InterruptedException, DigestException, IOException, LibsodiumException { HabState hab = this.get(name) .orElseThrow(() -> new IllegalArgumentException("Identifier not found: " + name)); - return this.createInteract(hab, data); - } - - private InteractionResponse createInteract(HabState hab, Object data) throws DigestException, IOException, LibsodiumException { String pre = hab.getPrefix(); KeyStateRecord state = hab.getState(); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java b/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java index 0f70a826..808abf55 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java @@ -246,7 +246,7 @@ public static String[] getOrCreateIdentifier(SignifyClient client, String name, kargs.setWits(env.witnessIds()); } var result = client.identifiers().create(name, kargs); - Operation opResult = waitOperation(client, result.op(), Operation.class); + KelOperation opResult = waitOperation(client, result.op(), KelOperation.class); id = switch (opResult) { case CompletedWitnessOperation completed -> completed.getResponse().getI(); case CompletedDelegationOperation completed -> completed.getResponse().getI(); @@ -398,7 +398,6 @@ public static void deleteOperations(SignifyClient client, Operation op) throws I private static String findDependsName(Operation op) { return switch (op) { - case null -> null; case DelegatorOperation d when d.getMetadata() != null && d.getMetadata().getDepends() != null -> d.getMetadata().getDepends().getName(); case RegistryOperation r when r.getMetadata() != null && r.getMetadata().getDepends() != null -> From a0f3b9dd23fca5fe06ec97b7dc98c1f101d14e1a Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Thu, 16 Apr 2026 15:24:32 +0700 Subject: [PATCH 12/20] define KelOperation in spec --- .../app/config/GeneratedModelConfig.java | 1 - .../app/coring/OperationDeserializer.java | 19 ++ .../signify/app/coring/Operations.java | 9 +- .../model/CredentialOperationMetadata.java | 22 +- .../model/RegistryOperationMetadata.java | 10 +- .../RegistryOperationMetadataDepends.java | 274 ------------------ .../signify/app/OperationsTest.java | 61 ++-- .../signify/e2e/ChallengesTest.java | 1 - 8 files changed, 78 insertions(+), 319 deletions(-) delete mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadataDepends.java diff --git a/src/main/java/org/cardanofoundation/signify/app/config/GeneratedModelConfig.java b/src/main/java/org/cardanofoundation/signify/app/config/GeneratedModelConfig.java index ef421c1b..8ae3da82 100644 --- a/src/main/java/org/cardanofoundation/signify/app/config/GeneratedModelConfig.java +++ b/src/main/java/org/cardanofoundation/signify/app/config/GeneratedModelConfig.java @@ -18,7 +18,6 @@ private GeneratedModelConfig() { public static void configure(ObjectMapper mapper) { mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); mapper.addMixIn(CredentialState.class, CredentialStateMixin.class); mapper.registerModule(new JsonNullableModule()); diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/OperationDeserializer.java b/src/main/java/org/cardanofoundation/signify/app/coring/OperationDeserializer.java index d82995a7..d58519e2 100644 --- a/src/main/java/org/cardanofoundation/signify/app/coring/OperationDeserializer.java +++ b/src/main/java/org/cardanofoundation/signify/app/coring/OperationDeserializer.java @@ -3,6 +3,8 @@ import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.deser.ContextualDeserializer; +import com.fasterxml.jackson.databind.node.ObjectNode; + import org.cardanofoundation.signify.generated.keria.model.*; import java.io.IOException; @@ -123,6 +125,7 @@ public Operation deserialize(JsonParser p, DeserializationContext ctxt) throws I concreteType = opType.pending; } + removeDoneFields(node); JsonParser nodeParser = node.traverse(p.getCodec()); nodeParser.nextToken(); return ctxt.readValue(nodeParser, concreteType); @@ -135,4 +138,20 @@ private static OperationType resolveFromPrefix(String name) { String prefix = name.substring(0, name.indexOf('.')).toLowerCase(); return PREFIX_MAP.get(prefix); } + + /** + * Remove 'done' field only from depends. + */ + private static void removeDoneFields(JsonNode node) { + if (node != null && node.isObject()) { + node.fields().forEachRemaining(entry -> { + String key = entry.getKey(); + JsonNode value = entry.getValue(); + if ("depends".equals(key) && value.isObject()) { + ((ObjectNode) value).remove("done"); + } + removeDoneFields(value); + }); + } + } } diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java b/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java index fa30390d..924fccad 100644 --- a/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java +++ b/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java @@ -165,14 +165,11 @@ private static boolean isDone(Operation op) { private void waitOnDepends(Operation operation, WaitOptions options, long startingTime) throws IOException, InterruptedException, LibsodiumException { String depName = switch (operation) { case DelegatorOperation op when op.getMetadata() != null - && op.getMetadata().getDepends() != null - && (op.getMetadata().getDepends().getDone() == null || !Boolean.TRUE.equals(op.getMetadata().getDepends().getDone().getValue())) -> op.getMetadata().getDepends().getName(); + && op.getMetadata().getDepends() != null -> op.getMetadata().getDepends().getName(); case RegistryOperation op when op.getMetadata() != null - && op.getMetadata().getDepends() != null - && (op.getMetadata().getDepends().getDone() == null || !Boolean.TRUE.equals(op.getMetadata().getDepends().getDone().getValue())) -> op.getMetadata().getDepends().getName(); + && op.getMetadata().getDepends() != null -> op.getMetadata().getDepends().getName(); case CredentialOperation op when op.getMetadata() != null - && op.getMetadata().getDepends() != null - && (op.getMetadata().getDepends().getDone() == null || !Boolean.TRUE.equals(op.getMetadata().getDepends().getDone().getValue())) -> op.getMetadata().getDepends().getName(); + && op.getMetadata().getDepends() != null -> op.getMetadata().getDepends().getName(); default -> null; }; diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationMetadata.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationMetadata.java index 06d4202c..19df8b1a 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationMetadata.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperationMetadata.java @@ -21,7 +21,7 @@ import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonValue; import org.cardanofoundation.signify.generated.keria.model.CredentialSad; -import org.cardanofoundation.signify.generated.keria.model.RegistryOperationMetadataDepends; +import org.cardanofoundation.signify.generated.keria.model.KelOperation; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonTypeName; @@ -39,8 +39,8 @@ public class CredentialOperationMetadata { private CredentialSad ced; public static final String JSON_PROPERTY_DEPENDS = "depends"; - @jakarta.annotation.Nullable - private RegistryOperationMetadataDepends depends; + @jakarta.annotation.Nonnull + private KelOperation depends; public CredentialOperationMetadata() { } @@ -70,7 +70,7 @@ public void setCed(@jakarta.annotation.Nonnull CredentialSad ced) { this.ced = ced; } - public CredentialOperationMetadata depends(@jakarta.annotation.Nullable RegistryOperationMetadataDepends depends) { + public CredentialOperationMetadata depends(@jakarta.annotation.Nonnull KelOperation depends) { this.depends = depends; return this; @@ -80,18 +80,18 @@ public CredentialOperationMetadata depends(@jakarta.annotation.Nullable Registry * Get depends * @return depends */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + @jakarta.annotation.Nonnull + @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) - public RegistryOperationMetadataDepends getDepends() { + public KelOperation getDepends() { return depends; } - @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setDepends(@jakarta.annotation.Nullable RegistryOperationMetadataDepends depends) { + @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setDepends(@jakarta.annotation.Nonnull KelOperation depends) { this.depends = depends; } diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadata.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadata.java index f255843d..6e848c61 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadata.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadata.java @@ -21,7 +21,7 @@ import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonValue; import org.cardanofoundation.signify.generated.keria.model.Anchor; -import org.cardanofoundation.signify.generated.keria.model.RegistryOperationMetadataDepends; +import org.cardanofoundation.signify.generated.keria.model.KelOperation; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonTypeName; @@ -41,7 +41,7 @@ public class RegistryOperationMetadata { public static final String JSON_PROPERTY_DEPENDS = "depends"; @jakarta.annotation.Nonnull - private RegistryOperationMetadataDepends depends; + private KelOperation depends; public static final String JSON_PROPERTY_ANCHOR = "anchor"; @jakarta.annotation.Nonnull @@ -75,7 +75,7 @@ public void setPre(@jakarta.annotation.Nonnull String pre) { this.pre = pre; } - public RegistryOperationMetadata depends(@jakarta.annotation.Nonnull RegistryOperationMetadataDepends depends) { + public RegistryOperationMetadata depends(@jakarta.annotation.Nonnull KelOperation depends) { this.depends = depends; return this; @@ -89,14 +89,14 @@ public RegistryOperationMetadata depends(@jakarta.annotation.Nonnull RegistryOpe @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = true) @JsonInclude(value = JsonInclude.Include.ALWAYS) - public RegistryOperationMetadataDepends getDepends() { + public KelOperation getDepends() { return depends; } @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = true) @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDepends(@jakarta.annotation.Nonnull RegistryOperationMetadataDepends depends) { + public void setDepends(@jakarta.annotation.Nonnull KelOperation depends) { this.depends = depends; } diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadataDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadataDepends.java deleted file mode 100644 index 9666df4f..00000000 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperationMetadataDepends.java +++ /dev/null @@ -1,274 +0,0 @@ -/* - * KERIA Interactive Web Interface API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 1.0.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -package org.cardanofoundation.signify.generated.keria.model; - -import java.util.Objects; -import java.util.Arrays; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.annotation.JsonValue; -import org.cardanofoundation.signify.generated.keria.model.CompletedDelegationOperationResponse; -import org.cardanofoundation.signify.generated.keria.model.DelegationMetadata; -import org.cardanofoundation.signify.generated.keria.model.DelegationOperation; -import org.cardanofoundation.signify.generated.keria.model.DoneOperation; -import org.cardanofoundation.signify.generated.keria.model.GroupOperation; -import org.cardanofoundation.signify.generated.keria.model.OperationStatus; -import org.cardanofoundation.signify.generated.keria.model.WitnessOperation; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonTypeName; - -/** - * RegistryOperationMetadataDepends - */ -@JsonPropertyOrder({ - RegistryOperationMetadataDepends.JSON_PROPERTY_NAME, - RegistryOperationMetadataDepends.JSON_PROPERTY_METADATA, - RegistryOperationMetadataDepends.JSON_PROPERTY_DONE, - RegistryOperationMetadataDepends.JSON_PROPERTY_ERROR, - RegistryOperationMetadataDepends.JSON_PROPERTY_RESPONSE -}) -@JsonTypeName("RegistryOperationMetadata_depends") -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class RegistryOperationMetadataDepends { - public static final String JSON_PROPERTY_NAME = "name"; - @jakarta.annotation.Nonnull - private String name; - - public static final String JSON_PROPERTY_METADATA = "metadata"; - @jakarta.annotation.Nullable - private DelegationMetadata metadata; - - /** - * Gets or Sets done - */ - public enum DoneEnum { - TRUE(Boolean.valueOf("true")); - - private Boolean value; - - DoneEnum(Boolean value) { - this.value = value; - } - - @JsonValue - public Boolean getValue() { - return value; - } - - @Override - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static DoneEnum fromValue(Boolean value) { - for (DoneEnum b : DoneEnum.values()) { - if (b.value.equals(value)) { - return b; - } - } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); - } - } - - public static final String JSON_PROPERTY_DONE = "done"; - @jakarta.annotation.Nonnull - private DoneEnum done; - - public static final String JSON_PROPERTY_ERROR = "error"; - @jakarta.annotation.Nonnull - private OperationStatus error; - - public static final String JSON_PROPERTY_RESPONSE = "response"; - @jakarta.annotation.Nonnull - private CompletedDelegationOperationResponse response; - - public RegistryOperationMetadataDepends() { - } - - public RegistryOperationMetadataDepends name(@jakarta.annotation.Nonnull String name) { - - this.name = name; - return this; - } - - /** - * Get name - * @return name - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getName() { - return name; - } - - - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setName(@jakarta.annotation.Nonnull String name) { - this.name = name; - } - - public RegistryOperationMetadataDepends metadata(@jakarta.annotation.Nullable DelegationMetadata metadata) { - - this.metadata = metadata; - return this; - } - - /** - * Get metadata - * @return metadata - */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - - public DelegationMetadata getMetadata() { - return metadata; - } - - - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMetadata(@jakarta.annotation.Nullable DelegationMetadata metadata) { - this.metadata = metadata; - } - - public RegistryOperationMetadataDepends done(@jakarta.annotation.Nonnull DoneEnum done) { - - this.done = done; - return this; - } - - /** - * Get done - * @return done - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneEnum getDone() { - return done; - } - - - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDone(@jakarta.annotation.Nonnull DoneEnum done) { - this.done = done; - } - - public RegistryOperationMetadataDepends error(@jakarta.annotation.Nonnull OperationStatus error) { - - this.error = error; - return this; - } - - /** - * Get error - * @return error - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public OperationStatus getError() { - return error; - } - - - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setError(@jakarta.annotation.Nonnull OperationStatus error) { - this.error = error; - } - - public RegistryOperationMetadataDepends response(@jakarta.annotation.Nonnull CompletedDelegationOperationResponse response) { - - this.response = response; - return this; - } - - /** - * Get response - * @return response - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public CompletedDelegationOperationResponse getResponse() { - return response; - } - - - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setResponse(@jakarta.annotation.Nonnull CompletedDelegationOperationResponse response) { - this.response = response; - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - RegistryOperationMetadataDepends registryOperationMetadataDepends = (RegistryOperationMetadataDepends) o; - return Objects.equals(this.name, registryOperationMetadataDepends.name) && - Objects.equals(this.metadata, registryOperationMetadataDepends.metadata) && - Objects.equals(this.done, registryOperationMetadataDepends.done) && - Objects.equals(this.error, registryOperationMetadataDepends.error) && - Objects.equals(this.response, registryOperationMetadataDepends.response); - } - - @Override - public int hashCode() { - return Objects.hash(name, metadata, done, error, response); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class RegistryOperationMetadataDepends {\n"); - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" done: ").append(toIndentedString(done)).append("\n"); - sb.append(" error: ").append(toIndentedString(error)).append("\n"); - sb.append(" response: ").append(toIndentedString(response)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } - -} - diff --git a/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java b/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java index 358f2943..38d7e573 100644 --- a/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java +++ b/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java @@ -14,6 +14,8 @@ import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.*; public class OperationsTest { @@ -33,6 +35,19 @@ void setUp() { operations = new Operations(client); } + private String pendingDoneOpJson(String name) { + return "{\"_type\":\"PendingDoneOperation\",\"name\":\"" + name + "\",\"done\":false,\"metadata\":{\"pre\":\"ETest\",\"response\":{}}}"; + } + + private String completedDoneOpJson(String name) { + return "{" + + "\"_type\": \"CompletedDoneOperation\"," + + "\"name\": \"" + name + "\"," + + "\"done\": true," + + "\"response\": {\"pre\": \"ETest\", \"response\": {}}" + + "}"; + } + @Test @DisplayName("should get operation by name") void canGetOperationByName() throws IOException, InterruptedException, LibsodiumException { @@ -169,39 +184,37 @@ void returnsWhenOperationIsDoneAfterSecondPoll() throws IOException, Interrupted @Test @DisplayName("Returns when child operation is also done") void returnsWhenChildOperationIsAlsoDone() throws IOException, InterruptedException, LibsodiumException { - String depName = "registry." + UUID.randomUUID(); + String depName = "done." + UUID.randomUUID(); String mainName = "registry." + UUID.randomUUID(); HttpResponse response1 = Mockito.mock(HttpResponse.class); - // main: pending, depends (depName) is not done + // main: registry op, pending, depends (depName) is not done Mockito.when(response1.body()).thenReturn(pendingRegistryWithDependsJson(mainName, depName, false)); Mockito.when(response1.statusCode()).thenReturn(200); HttpResponse response2 = Mockito.mock(HttpResponse.class); - // dep: pending, no nested depends - Mockito.when(response2.body()).thenReturn(pendingRegistryOpJson(depName)); + Mockito.when(response2.body()).thenReturn(pendingDoneOpJson(depName)); Mockito.when(response2.statusCode()).thenReturn(200); HttpResponse response3 = Mockito.mock(HttpResponse.class); - // dep: done - Mockito.when(response3.body()).thenReturn(doneRegistryOpJson(depName)); + Mockito.when(response3.body()).thenReturn(completedDoneOpJson(depName)); Mockito.when(response3.statusCode()).thenReturn(200); HttpResponse response4 = Mockito.mock(HttpResponse.class); - // main: done - Mockito.when(response4.body()).thenReturn(doneRegistryOpJson(mainName)); + // main: registry op, now done + Mockito.when(response4.body()).thenReturn(pendingRegistryWithDependsJson(mainName, depName, true)); Mockito.when(response4.statusCode()).thenReturn(200); when(client.fetch(anyString(), anyString(), isNull())) .thenReturn(response1) // main: initial fetch - pending, depends not done .thenReturn(response2) // dep: initial fetch - pending, no nested depends .thenReturn(response3) // dep: poll - done - .thenReturn(response4); // main: poll - done + .thenReturn(response4); // main: poll - depends now done Operations.WaitOptions options = Operations.WaitOptions.builder() - .maxSleep(10) - .build(); - operations.wait(mainName, Operation.class, options); + .maxSleep(10) + .build(); + operations.wait(mainName, org.cardanofoundation.signify.generated.keria.model.Operation.class, options); verify(client, times(4)).fetch(anyString(), anyString(), isNull()); } @@ -237,15 +250,21 @@ private String doneLocSchemeOpJson(String name) { return "{\"name\": \"" + name + "\", \"response\": {\"eid\": \"ETest\", \"scheme\": \"http\", \"url\": \"http://test\"}}"; } - private String pendingRegistryOpJson(String name) { - return "{\"name\": \"" + name + "\", \"metadata\": {\"pre\": \"ETest\", \"anchor\": {\"pre\": \"ETest\", \"sn\": 0, \"d\": \"ETest\"}}}"; - } - private String pendingRegistryWithDependsJson(String name, String depName, boolean depDone) { - return "{\"name\": \"" + name + "\", \"metadata\": {\"pre\": \"ETest\", \"anchor\": {\"pre\": \"ETest\", \"sn\": 0, \"d\": \"ETest\"}, \"depends\": {\"name\": \"" + depName + "\", \"done\": " + depDone + "}}}"; - } - - private String doneRegistryOpJson(String name) { - return "{\"name\": \"" + name + "\", \"response\": {\"anchor\": {\"pre\": \"ETest\", \"sn\": 0, \"d\": \"ETest\"}}}"; + return "{" + + "\"_type\": \"RegistryDoneOperation\"," + + "\"name\": \"" + name + "\"," + + "\"done\": false," + + "\"metadata\": {" + + "\"pre\": \"ETest\"," + + "\"anchor\": {\"pre\": \"ETest\", \"sn\": 0, \"d\": \"ETest\"}," + + "\"depends\": {" + + "\"_type\": \"PendingDoneOperation\"," + + "\"name\": \"" + depName + "\"," + + "\"done\": " + depDone + "," + + "\"metadata\": {\"pre\": \"ETest\", \"response\": {}}" + + "}" + + "}" + + "}"; } } \ No newline at end of file diff --git a/src/test/java/org/cardanofoundation/signify/e2e/ChallengesTest.java b/src/test/java/org/cardanofoundation/signify/e2e/ChallengesTest.java index 37cd15ed..585d4f8b 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/ChallengesTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/ChallengesTest.java @@ -12,7 +12,6 @@ import java.util.*; import static org.junit.jupiter.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.assertTrue; import static org.cardanofoundation.signify.e2e.utils.TestUtils.*; public class ChallengesTest { From 9512378eb0d39a9382e82cdc96f7263f635dc097 Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Thu, 16 Apr 2026 15:57:22 +0700 Subject: [PATCH 13/20] fix test --- .../signify/app/OperationsTest.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java b/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java index 38d7e573..5825e40f 100644 --- a/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java +++ b/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java @@ -201,15 +201,15 @@ void returnsWhenChildOperationIsAlsoDone() throws IOException, InterruptedExcept Mockito.when(response3.statusCode()).thenReturn(200); HttpResponse response4 = Mockito.mock(HttpResponse.class); - // main: registry op, now done - Mockito.when(response4.body()).thenReturn(pendingRegistryWithDependsJson(mainName, depName, true)); + // main: registry op, now done (completed) + Mockito.when(response4.body()).thenReturn(completedRegistryOpJson(mainName, depName)); Mockito.when(response4.statusCode()).thenReturn(200); when(client.fetch(anyString(), anyString(), isNull())) .thenReturn(response1) // main: initial fetch - pending, depends not done .thenReturn(response2) // dep: initial fetch - pending, no nested depends .thenReturn(response3) // dep: poll - done - .thenReturn(response4); // main: poll - depends now done + .thenReturn(response4); // main: poll - now done (completed) Operations.WaitOptions options = Operations.WaitOptions.builder() .maxSleep(10) @@ -240,7 +240,24 @@ void throwIfAbortingOperation() throws IOException, InterruptedException, Libsod assertEquals("Operation aborted: Timeout", exception.getMessage()); } - // --- JSON helpers --- + private String completedRegistryOpJson(String name, String depName) { + return "{" + + "\"_type\": \"CompletedRegistryOperation\"," + + "\"name\": \"" + name + "\"," + + "\"done\": \"true\"," + + "\"metadata\": {" + + "\"pre\": \"ETest\"," + + "\"anchor\": {\"pre\": \"ETest\", \"sn\": 0, \"d\": \"ETest\"}," + + "\"depends\": {" + + "\"_type\": \"CompletedDoneOperation\"," + + "\"name\": \"" + depName + "\"," + + "\"done\": true," + + "\"metadata\": {\"pre\": \"ETest\", \"response\": {}}" + + "}" + + "}," + + "\"response\": {\"anchor\": {\"pre\": \"ETest\", \"sn\": 0, \"d\": \"ETest\"}}" + + "}"; + } private String pendingLocSchemeOpJson(String name) { return "{\"name\": \"" + name + "\"}"; From 13e3042e7285f890770b801734352af641dd6baf Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Fri, 17 Apr 2026 16:16:46 +0700 Subject: [PATCH 14/20] improve operations --- build.gradle | 64 ++-- .../signify/app/coring/Operations.java | 39 ++- .../keria/model/ChallengeOperation.java | 1 + .../keria/model/CredentialOperation.java | 1 + .../keria/model/DelegationOperation.java | 1 + .../model/DelegatorDependsOperation.java | 10 + .../keria/model/DelegatorOperation.java | 1 + .../model/DelegatorOperationMetadata.java | 10 +- .../DelegatorOperationMetadataDepends.java | 273 ------------------ .../generated/keria/model/DoneOperation.java | 3 +- .../keria/model/EndRoleOperation.java | 1 + .../keria/model/ExchangeOperation.java | 1 + .../generated/keria/model/GroupOperation.java | 3 +- .../keria/model/LocSchemeOperation.java | 1 + .../generated/keria/model/OOBIOperation.java | 1 + .../generated/keria/model/Operation.java | 17 +- .../generated/keria/model/QueryOperation.java | 1 + .../keria/model/RegistryOperation.java | 1 + .../keria/model/SubmitOperation.java | 1 + .../keria/model/WitnessOperation.java | 3 +- .../signify/app/OperationsTest.java | 44 +-- .../signify/e2e/MultisigTest.java | 3 +- .../signify/e2e/utils/TestUtils.java | 6 +- 23 files changed, 131 insertions(+), 355 deletions(-) create mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorDependsOperation.java delete mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadataDepends.java diff --git a/build.gradle b/build.gradle index b11b8fe9..e9732650 100644 --- a/build.gradle +++ b/build.gradle @@ -259,6 +259,7 @@ tasks.named("openApiGenerate") { ] def kelOps = ["Done", "Witness", "Submit", "Group", "Delegation"] as Set def modelDir = file("src/main/java/org/cardanofoundation/signify/generated/keria/model") + def dualExtendsOps = ["Group", "Witness", "Done"] ops.each { op -> // Detect metadata type from the Pending variant @@ -286,8 +287,10 @@ tasks.named("openApiGenerate") { // Replace the generated merged oneOf class with a sealed interface def target = new File(modelDir, "${op}Operation.java") def metadataMethod = metadataType ? "\n ${metadataType} getMetadata();" : "" - def extendsClause = kelOps.contains(op) ? "extends KelOperation" : "extends Operation" - target.text = """\ + def extendsClause = kelOps.contains(op) + ? (dualExtendsOps.contains(op) ? "extends KelOperation, DelegatorDependsOperation" : "extends KelOperation") + : "extends Operation" + target.text = """ package org.cardanofoundation.signify.generated.keria.model; public sealed interface ${op}Operation ${extendsClause} permits @@ -300,26 +303,30 @@ ${metadataMethod} } // Generate the general Operation sealed interface (union of all operation types) - // KelOperation is listed as a permitted subtype; individual KelOp types are only reachable via KelOperation - def permitsEntries = (ops.findAll { !kelOps.contains(it) }.collect { op -> "${op}Operation" } + ["KelOperation"]) - .sort() - .collect { name -> " ${name}" } - .join(",\n") - def operationFile = new File(modelDir, "Operation.java") - operationFile.text = """\ -package org.cardanofoundation.signify.generated.keria.model; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import org.cardanofoundation.signify.app.coring.OperationDeserializer; - -@JsonDeserialize(using = OperationDeserializer.class) -public sealed interface Operation permits -${permitsEntries} { - - String getName(); -} -""" + operationFile.text = """ + package org.cardanofoundation.signify.generated.keria.model; + + import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + import org.cardanofoundation.signify.app.coring.OperationDeserializer; + + @JsonDeserialize(using = OperationDeserializer.class) + public sealed interface Operation permits + ChallengeOperation, + CredentialOperation, + DelegatorOperation, + EndRoleOperation, + ExchangeOperation, + KelOperation, + DelegatorDependsOperation, + LocSchemeOperation, + OOBIOperation, + QueryOperation, + RegistryOperation { + + String getName(); + } + """ // Generate KelOperation — a sealed group interface for all KEL event operation types. def kelPermits = kelOps.sort().collect { op -> " ${op}Operation" }.join(",\n") @@ -333,6 +340,21 @@ package org.cardanofoundation.signify.generated.keria.model; public sealed interface KelOperation extends Operation permits ${kelPermits} { } +""" + + // Generate DelegatorDependsOperation as a sealed interface + def delegatorDependsFile = new File(modelDir, "DelegatorDependsOperation.java") + delegatorDependsFile.text = """\ +package org.cardanofoundation.signify.generated.keria.model; + +/** + * Marker interface for DelegatorDependsOperation, for protocol operation dependency. + */ +public sealed interface DelegatorDependsOperation extends Operation permits + GroupOperation, + WitnessOperation, + DoneOperation { +} """ } } \ No newline at end of file diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java b/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java index 924fccad..fd4cf6ba 100644 --- a/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java +++ b/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java @@ -73,35 +73,34 @@ public void delete(String name) throws IOException, InterruptedException, Libsod /** * Wait for an operation to complete, returning the result as the general Operation union type. * - * @param operationName The name of the operation to wait for + * @param op The operation instance to wait for */ - public Operation wait(String operationName) throws IOException, InterruptedException, LibsodiumException { - return wait(operationName, Operation.class, WaitOptions.builder().build(), System.currentTimeMillis()); + public Operation wait(Operation op) throws IOException, InterruptedException, LibsodiumException { + return wait(op, Operation.class, WaitOptions.builder().build(), System.currentTimeMillis()); } /** * Wait for an operation to complete, returning the result deserialized into the given type. * Handles dependent operations automatically. * - * @param operationName The name of the operation to wait for + * @param op The operation instance to wait for * @param resultType The target class to deserialize the final result into (e.g., CredentialOperation.class) */ - public T wait(String operationName, Class resultType) throws IOException, InterruptedException, LibsodiumException { - return wait(operationName, resultType, WaitOptions.builder().build(), System.currentTimeMillis()); + public T wait(Operation op, Class resultType) throws IOException, InterruptedException, LibsodiumException { + return wait(op, resultType, WaitOptions.builder().build(), System.currentTimeMillis()); } - public T wait(String operationName, Class resultType, WaitOptions options) throws IOException, InterruptedException, LibsodiumException { - return wait(operationName, resultType, options, System.currentTimeMillis()); + public T wait(Operation op, Class resultType, WaitOptions options) throws IOException, InterruptedException, LibsodiumException { + return wait(op, resultType, options, System.currentTimeMillis()); } @SuppressWarnings("unchecked") - private T wait(String operationName, Class resultType, WaitOptions options, long startingTime) throws IOException, InterruptedException, LibsodiumException { + private T wait(Operation op, Class resultType, WaitOptions options, long startingTime) throws IOException, InterruptedException, LibsodiumException { int minSleep = options.getMinSleep(); int maxSleep = options.getMaxSleep(); int increaseFactor = options.getIncreaseFactor(); - Operation op = get(operationName, Operation.class) - .orElseThrow(() -> new IOException("Operation not found: " + operationName)); + String operationName = op.getName(); waitOnDepends(op, options, startingTime); @@ -116,15 +115,15 @@ private T wait(String operationName, Class resultType, int retries = 0; while (true) { - op = get(operationName, Operation.class) + Operation newOp = get(operationName, Operation.class) .orElseThrow(() -> new IOException("Operation not found: " + operationName)); int delay = Math.max(minSleep, Math.min(maxSleep, (int) Math.pow(2, retries) * increaseFactor)); retries++; - if (isDone(op)) { + if (isDone(newOp)) { if (resultType == Operation.class) { - return (T) op; + return (T) newOp; } return get(operationName, resultType) .orElseThrow(() -> new IOException("Operation not found: " + operationName)); @@ -163,18 +162,18 @@ private static boolean isDone(Operation op) { } private void waitOnDepends(Operation operation, WaitOptions options, long startingTime) throws IOException, InterruptedException, LibsodiumException { - String depName = switch (operation) { + Operation depOp = switch (operation) { case DelegatorOperation op when op.getMetadata() != null - && op.getMetadata().getDepends() != null -> op.getMetadata().getDepends().getName(); + && op.getMetadata().getDepends() != null -> op.getMetadata().getDepends(); case RegistryOperation op when op.getMetadata() != null - && op.getMetadata().getDepends() != null -> op.getMetadata().getDepends().getName(); + && op.getMetadata().getDepends() != null -> op.getMetadata().getDepends(); case CredentialOperation op when op.getMetadata() != null - && op.getMetadata().getDepends() != null -> op.getMetadata().getDepends().getName(); + && op.getMetadata().getDepends() != null -> op.getMetadata().getDepends(); default -> null; }; - if (depName != null) { - wait(depName, Operation.class, options, startingTime); + if (depOp != null) { + wait(depOp, Operation.class, options, startingTime); } } diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/ChallengeOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/ChallengeOperation.java index 3c6f39da..f350c942 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/ChallengeOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/ChallengeOperation.java @@ -1,3 +1,4 @@ + package org.cardanofoundation.signify.generated.keria.model; public sealed interface ChallengeOperation extends Operation permits diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperation.java index 36f338aa..442b682f 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/CredentialOperation.java @@ -1,3 +1,4 @@ + package org.cardanofoundation.signify.generated.keria.model; public sealed interface CredentialOperation extends Operation permits diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegationOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegationOperation.java index 7dc48e2b..009a463e 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegationOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegationOperation.java @@ -1,3 +1,4 @@ + package org.cardanofoundation.signify.generated.keria.model; public sealed interface DelegationOperation extends KelOperation permits diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorDependsOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorDependsOperation.java new file mode 100644 index 00000000..740ccd7c --- /dev/null +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorDependsOperation.java @@ -0,0 +1,10 @@ +package org.cardanofoundation.signify.generated.keria.model; + +/** + * Marker interface for DelegatorDependsOperation, for protocol operation dependency. + */ +public sealed interface DelegatorDependsOperation extends Operation permits + GroupOperation, + WitnessOperation, + DoneOperation { +} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperation.java index c7fab284..a7d369d9 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperation.java @@ -1,3 +1,4 @@ + package org.cardanofoundation.signify.generated.keria.model; public sealed interface DelegatorOperation extends Operation permits diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadata.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadata.java index b0ec8d73..8cb2adc4 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadata.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadata.java @@ -21,7 +21,7 @@ import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonValue; import org.cardanofoundation.signify.generated.keria.model.Anchor; -import org.cardanofoundation.signify.generated.keria.model.DelegatorOperationMetadataDepends; +import org.cardanofoundation.signify.generated.keria.model.DelegatorDependsOperation; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonTypeName; @@ -50,7 +50,7 @@ public class DelegatorOperationMetadata { public static final String JSON_PROPERTY_DEPENDS = "depends"; @jakarta.annotation.Nullable - private DelegatorOperationMetadataDepends depends; + private DelegatorDependsOperation depends; public DelegatorOperationMetadata() { } @@ -130,7 +130,7 @@ public void setAnchor(@jakarta.annotation.Nullable Anchor anchor) { this.anchor = anchor; } - public DelegatorOperationMetadata depends(@jakarta.annotation.Nullable DelegatorOperationMetadataDepends depends) { + public DelegatorOperationMetadata depends(@jakarta.annotation.Nullable DelegatorDependsOperation depends) { this.depends = depends; return this; @@ -144,14 +144,14 @@ public DelegatorOperationMetadata depends(@jakarta.annotation.Nullable Delegator @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public DelegatorOperationMetadataDepends getDepends() { + public DelegatorDependsOperation getDepends() { return depends; } @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setDepends(@jakarta.annotation.Nullable DelegatorOperationMetadataDepends depends) { + public void setDepends(@jakarta.annotation.Nullable DelegatorDependsOperation depends) { this.depends = depends; } diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadataDepends.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadataDepends.java deleted file mode 100644 index b61eac75..00000000 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadataDepends.java +++ /dev/null @@ -1,273 +0,0 @@ -/* - * KERIA Interactive Web Interface API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 1.0.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -package org.cardanofoundation.signify.generated.keria.model; - -import java.util.Objects; -import java.util.Arrays; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.annotation.JsonValue; -import org.cardanofoundation.signify.generated.keria.model.DoneOperation; -import org.cardanofoundation.signify.generated.keria.model.DoneOperationMetadata; -import org.cardanofoundation.signify.generated.keria.model.DoneOperationMetadataResponse; -import org.cardanofoundation.signify.generated.keria.model.GroupOperation; -import org.cardanofoundation.signify.generated.keria.model.OperationStatus; -import org.cardanofoundation.signify.generated.keria.model.WitnessOperation; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonTypeName; - -/** - * DelegatorOperationMetadataDepends - */ -@JsonPropertyOrder({ - DelegatorOperationMetadataDepends.JSON_PROPERTY_NAME, - DelegatorOperationMetadataDepends.JSON_PROPERTY_METADATA, - DelegatorOperationMetadataDepends.JSON_PROPERTY_DONE, - DelegatorOperationMetadataDepends.JSON_PROPERTY_ERROR, - DelegatorOperationMetadataDepends.JSON_PROPERTY_RESPONSE -}) -@JsonTypeName("DelegatorOperationMetadata_depends") -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.18.0") -public class DelegatorOperationMetadataDepends { - public static final String JSON_PROPERTY_NAME = "name"; - @jakarta.annotation.Nonnull - private String name; - - public static final String JSON_PROPERTY_METADATA = "metadata"; - @jakarta.annotation.Nullable - private DoneOperationMetadata metadata; - - /** - * Gets or Sets done - */ - public enum DoneEnum { - TRUE(Boolean.valueOf("true")); - - private Boolean value; - - DoneEnum(Boolean value) { - this.value = value; - } - - @JsonValue - public Boolean getValue() { - return value; - } - - @Override - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static DoneEnum fromValue(Boolean value) { - for (DoneEnum b : DoneEnum.values()) { - if (b.value.equals(value)) { - return b; - } - } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); - } - } - - public static final String JSON_PROPERTY_DONE = "done"; - @jakarta.annotation.Nonnull - private DoneEnum done; - - public static final String JSON_PROPERTY_ERROR = "error"; - @jakarta.annotation.Nonnull - private OperationStatus error; - - public static final String JSON_PROPERTY_RESPONSE = "response"; - @jakarta.annotation.Nonnull - private DoneOperationMetadataResponse response; - - public DelegatorOperationMetadataDepends() { - } - - public DelegatorOperationMetadataDepends name(@jakarta.annotation.Nonnull String name) { - - this.name = name; - return this; - } - - /** - * Get name - * @return name - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public String getName() { - return name; - } - - - @JsonProperty(value = JSON_PROPERTY_NAME, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setName(@jakarta.annotation.Nonnull String name) { - this.name = name; - } - - public DelegatorOperationMetadataDepends metadata(@jakarta.annotation.Nullable DoneOperationMetadata metadata) { - - this.metadata = metadata; - return this; - } - - /** - * Get metadata - * @return metadata - */ - @jakarta.annotation.Nullable - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - - public DoneOperationMetadata getMetadata() { - return metadata; - } - - - @JsonProperty(value = JSON_PROPERTY_METADATA, required = false) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMetadata(@jakarta.annotation.Nullable DoneOperationMetadata metadata) { - this.metadata = metadata; - } - - public DelegatorOperationMetadataDepends done(@jakarta.annotation.Nonnull DoneEnum done) { - - this.done = done; - return this; - } - - /** - * Get done - * @return done - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneEnum getDone() { - return done; - } - - - @JsonProperty(value = JSON_PROPERTY_DONE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDone(@jakarta.annotation.Nonnull DoneEnum done) { - this.done = done; - } - - public DelegatorOperationMetadataDepends error(@jakarta.annotation.Nonnull OperationStatus error) { - - this.error = error; - return this; - } - - /** - * Get error - * @return error - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public OperationStatus getError() { - return error; - } - - - @JsonProperty(value = JSON_PROPERTY_ERROR, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setError(@jakarta.annotation.Nonnull OperationStatus error) { - this.error = error; - } - - public DelegatorOperationMetadataDepends response(@jakarta.annotation.Nonnull DoneOperationMetadataResponse response) { - - this.response = response; - return this; - } - - /** - * Get response - * @return response - */ - @jakarta.annotation.Nonnull - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - - public DoneOperationMetadataResponse getResponse() { - return response; - } - - - @JsonProperty(value = JSON_PROPERTY_RESPONSE, required = true) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setResponse(@jakarta.annotation.Nonnull DoneOperationMetadataResponse response) { - this.response = response; - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - DelegatorOperationMetadataDepends delegatorOperationMetadataDepends = (DelegatorOperationMetadataDepends) o; - return Objects.equals(this.name, delegatorOperationMetadataDepends.name) && - Objects.equals(this.metadata, delegatorOperationMetadataDepends.metadata) && - Objects.equals(this.done, delegatorOperationMetadataDepends.done) && - Objects.equals(this.error, delegatorOperationMetadataDepends.error) && - Objects.equals(this.response, delegatorOperationMetadataDepends.response); - } - - @Override - public int hashCode() { - return Objects.hash(name, metadata, done, error, response); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class DelegatorOperationMetadataDepends {\n"); - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" done: ").append(toIndentedString(done)).append("\n"); - sb.append(" error: ").append(toIndentedString(error)).append("\n"); - sb.append(" response: ").append(toIndentedString(response)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } - -} - diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java index e4cccd5e..dc8ef6ee 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java @@ -1,6 +1,7 @@ + package org.cardanofoundation.signify.generated.keria.model; -public sealed interface DoneOperation extends KelOperation permits +public sealed interface DoneOperation extends KelOperation, DelegatorDependsOperation permits PendingDoneOperation, CompletedDoneOperation, FailedDoneOperation { diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/EndRoleOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/EndRoleOperation.java index 73599962..07ede67b 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/EndRoleOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/EndRoleOperation.java @@ -1,3 +1,4 @@ + package org.cardanofoundation.signify.generated.keria.model; public sealed interface EndRoleOperation extends Operation permits diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/ExchangeOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/ExchangeOperation.java index 558754c3..2aa0e738 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/ExchangeOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/ExchangeOperation.java @@ -1,3 +1,4 @@ + package org.cardanofoundation.signify.generated.keria.model; public sealed interface ExchangeOperation extends Operation permits diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java index 5fbab86f..a5c0e55b 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java @@ -1,6 +1,7 @@ + package org.cardanofoundation.signify.generated.keria.model; -public sealed interface GroupOperation extends KelOperation permits +public sealed interface GroupOperation extends KelOperation, DelegatorDependsOperation permits PendingGroupOperation, CompletedGroupOperation, FailedGroupOperation { diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/LocSchemeOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/LocSchemeOperation.java index f01d67d1..6077f65a 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/LocSchemeOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/LocSchemeOperation.java @@ -1,3 +1,4 @@ + package org.cardanofoundation.signify.generated.keria.model; public sealed interface LocSchemeOperation extends Operation permits diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/OOBIOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/OOBIOperation.java index 08dbdc47..81a14eb8 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/OOBIOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/OOBIOperation.java @@ -1,3 +1,4 @@ + package org.cardanofoundation.signify.generated.keria.model; public sealed interface OOBIOperation extends Operation permits diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java index e0b76520..81b0e888 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java @@ -1,20 +1,23 @@ -package org.cardanofoundation.signify.generated.keria.model; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import org.cardanofoundation.signify.app.coring.OperationDeserializer; + package org.cardanofoundation.signify.generated.keria.model; -@JsonDeserialize(using = OperationDeserializer.class) -public sealed interface Operation permits + import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + import org.cardanofoundation.signify.app.coring.OperationDeserializer; + + @JsonDeserialize(using = OperationDeserializer.class) + public sealed interface Operation permits ChallengeOperation, CredentialOperation, DelegatorOperation, EndRoleOperation, ExchangeOperation, KelOperation, + DelegatorDependsOperation, LocSchemeOperation, OOBIOperation, QueryOperation, RegistryOperation { - String getName(); -} + String getName(); + } + \ No newline at end of file diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/QueryOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/QueryOperation.java index 91ce616c..c667a3e7 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/QueryOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/QueryOperation.java @@ -1,3 +1,4 @@ + package org.cardanofoundation.signify.generated.keria.model; public sealed interface QueryOperation extends Operation permits diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperation.java index 8c8bce12..ed39b35b 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/RegistryOperation.java @@ -1,3 +1,4 @@ + package org.cardanofoundation.signify.generated.keria.model; public sealed interface RegistryOperation extends Operation permits diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/SubmitOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/SubmitOperation.java index 7327e456..fd570197 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/SubmitOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/SubmitOperation.java @@ -1,3 +1,4 @@ + package org.cardanofoundation.signify.generated.keria.model; public sealed interface SubmitOperation extends KelOperation permits diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java index eb73c747..6f13d30e 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java @@ -1,6 +1,7 @@ + package org.cardanofoundation.signify.generated.keria.model; -public sealed interface WitnessOperation extends KelOperation permits +public sealed interface WitnessOperation extends KelOperation, DelegatorDependsOperation permits PendingWitnessOperation, CompletedWitnessOperation, FailedWitnessOperation { diff --git a/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java b/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java index 5825e40f..c621ab3c 100644 --- a/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java +++ b/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java @@ -32,7 +32,6 @@ public class OperationsTest { @BeforeEach void setUp() { MockitoAnnotations.openMocks(this); - operations = new Operations(client); } private String pendingDoneOpJson(String name) { @@ -121,36 +120,34 @@ void canDeleteOperationByName() throws IOException, InterruptedException, Libsod @DisplayName("Does not poll when operation is already done") void doesNotWaitForOperationThatIsAlreadyDone() throws IOException, InterruptedException, LibsodiumException { String opName = "locscheme." + UUID.randomUUID(); + String doneJson = doneLocSchemeOpJson(opName); - HttpResponse mockResponse = Mockito.mock(HttpResponse.class); - Mockito.when(mockResponse.body()).thenReturn(doneLocSchemeOpJson(opName)); - Mockito.when(mockResponse.statusCode()).thenReturn(200); - when(client.fetch(anyString(), anyString(), isNull())) - .thenReturn(mockResponse); - - operations.wait(opName, Operation.class); - // 1 fetch: initial check finds done=true, returns immediately - verify(client, times(1)).fetch(anyString(), anyString(), isNull()); + Operation op = org.cardanofoundation.signify.cesr.util.Utils.fromJson(doneJson, Operation.class); + operations.wait(op, Operation.class); + verifyNoInteractions(client); } @Test @DisplayName("Returns when operation is done after first poll") void returnsWhenOperationIsDoneAfterFirstPoll() throws IOException, InterruptedException, LibsodiumException { String opName = "locscheme." + UUID.randomUUID(); + String pendingJson = pendingLocSchemeOpJson(opName); + String doneJson = doneLocSchemeOpJson(opName); HttpResponse pendingResponse = Mockito.mock(HttpResponse.class); - Mockito.when(pendingResponse.body()).thenReturn(pendingLocSchemeOpJson(opName)); + Mockito.when(pendingResponse.body()).thenReturn(pendingJson); Mockito.when(pendingResponse.statusCode()).thenReturn(200); HttpResponse doneResponse = Mockito.mock(HttpResponse.class); - Mockito.when(doneResponse.body()).thenReturn(doneLocSchemeOpJson(opName)); + Mockito.when(doneResponse.body()).thenReturn(doneJson); Mockito.when(doneResponse.statusCode()).thenReturn(200); when(client.fetch(anyString(), anyString(), isNull())) .thenReturn(pendingResponse) .thenReturn(doneResponse); - operations.wait(opName, Operation.class); + Operation op = org.cardanofoundation.signify.cesr.util.Utils.fromJson(pendingJson, Operation.class); + operations.wait(op, Operation.class); // 1 initial fetch + 1 poll verify(client, times(2)).fetch(anyString(), anyString(), isNull()); } @@ -159,13 +156,15 @@ void returnsWhenOperationIsDoneAfterFirstPoll() throws IOException, InterruptedE @DisplayName("Returns when operation is done after second poll") void returnsWhenOperationIsDoneAfterSecondPoll() throws IOException, InterruptedException, LibsodiumException { String opName = "locscheme." + UUID.randomUUID(); + String pendingJson = pendingLocSchemeOpJson(opName); + String doneJson = doneLocSchemeOpJson(opName); HttpResponse pendingResponse = Mockito.mock(HttpResponse.class); - Mockito.when(pendingResponse.body()).thenReturn(pendingLocSchemeOpJson(opName)); + Mockito.when(pendingResponse.body()).thenReturn(pendingJson); Mockito.when(pendingResponse.statusCode()).thenReturn(200); HttpResponse doneResponse = Mockito.mock(HttpResponse.class); - Mockito.when(doneResponse.body()).thenReturn(doneLocSchemeOpJson(opName)); + Mockito.when(doneResponse.body()).thenReturn(doneJson); Mockito.when(doneResponse.statusCode()).thenReturn(200); when(client.fetch(anyString(), anyString(), isNull())) @@ -174,9 +173,10 @@ void returnsWhenOperationIsDoneAfterSecondPoll() throws IOException, Interrupted .thenReturn(doneResponse); Operations.WaitOptions options = Operations.WaitOptions.builder() - .maxSleep(10) - .build(); - operations.wait(opName, Operation.class, options); + .maxSleep(10) + .build(); + Operation op = org.cardanofoundation.signify.cesr.util.Utils.fromJson(pendingJson, Operation.class); + operations.wait(op, Operation.class, options); // 1 initial + 2 polls verify(client, times(3)).fetch(anyString(), anyString(), isNull()); } @@ -214,7 +214,9 @@ void returnsWhenChildOperationIsAlsoDone() throws IOException, InterruptedExcept Operations.WaitOptions options = Operations.WaitOptions.builder() .maxSleep(10) .build(); - operations.wait(mainName, org.cardanofoundation.signify.generated.keria.model.Operation.class, options); + Operation mainOp = org.cardanofoundation.signify.cesr.util.Utils.fromJson( + pendingRegistryWithDependsJson(mainName, depName, false), Operation.class); + operations.wait(mainOp, org.cardanofoundation.signify.generated.keria.model.Operation.class, options); verify(client, times(4)).fetch(anyString(), anyString(), isNull()); } @@ -235,8 +237,10 @@ void throwIfAbortingOperation() throws IOException, InterruptedException, Libsod .abortSignal(Operations.AbortSignal.builder().timeout(5000L).build()) .build(); + Operation abortOp = org.cardanofoundation.signify.cesr.util.Utils.fromJson( + pendingLocSchemeOpJson(opName), Operation.class); Exception exception = assertThrows(InterruptedException.class, - () -> operations.wait(opName, Operation.class, options)); + () -> operations.wait(abortOp, Operation.class, options)); assertEquals("Operation aborted: Timeout", exception.getMessage()); } diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java index 090cdc23..68ee6094 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java @@ -982,8 +982,7 @@ public static List createRegistryMultisig( public static Operation waitOperations( SignifyClient client, Operation op) throws IOException, InterruptedException, LibsodiumException { - String name = op.getName(); - Operation operation = client.operations().wait(name); + Operation operation = client.operations().wait(op); TestUtils.deleteOperations(client, operation); return operation; } diff --git a/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java b/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java index 808abf55..a941f267 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java @@ -512,8 +512,7 @@ public static Operation waitOperation( SignifyClient client, Operation op ) throws IOException, InterruptedException, LibsodiumException { - String name = op.getName(); - Operation result = client.operations().wait(name); + Operation result = client.operations().wait(op); deleteOperations(client, op); return result; } @@ -523,8 +522,7 @@ public static T waitOperation( Operation op, Class type ) throws IOException, InterruptedException, LibsodiumException { - String name = op.getName(); - T result = client.operations().wait(name, type); + T result = client.operations().wait(op, type); deleteOperations(client, op); return result; } From 15a26ffa6e617da491b861041c474ff531183bcb Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Fri, 17 Apr 2026 17:16:59 +0700 Subject: [PATCH 15/20] using KelOperation instead of DelegatorDependsOperation --- build.gradle | 18 +----------------- .../keria/model/DelegatorDependsOperation.java | 10 ---------- .../model/DelegatorOperationMetadata.java | 10 +++++----- .../generated/keria/model/DoneOperation.java | 2 +- .../generated/keria/model/GroupOperation.java | 2 +- .../generated/keria/model/Operation.java | 1 - .../keria/model/WitnessOperation.java | 2 +- 7 files changed, 9 insertions(+), 36 deletions(-) delete mode 100644 src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorDependsOperation.java diff --git a/build.gradle b/build.gradle index e9732650..c592523a 100644 --- a/build.gradle +++ b/build.gradle @@ -288,7 +288,7 @@ tasks.named("openApiGenerate") { def target = new File(modelDir, "${op}Operation.java") def metadataMethod = metadataType ? "\n ${metadataType} getMetadata();" : "" def extendsClause = kelOps.contains(op) - ? (dualExtendsOps.contains(op) ? "extends KelOperation, DelegatorDependsOperation" : "extends KelOperation") + ? (dualExtendsOps.contains(op) ? "extends KelOperation" : "extends KelOperation") : "extends Operation" target.text = """ package org.cardanofoundation.signify.generated.keria.model; @@ -318,7 +318,6 @@ ${metadataMethod} EndRoleOperation, ExchangeOperation, KelOperation, - DelegatorDependsOperation, LocSchemeOperation, OOBIOperation, QueryOperation, @@ -340,21 +339,6 @@ package org.cardanofoundation.signify.generated.keria.model; public sealed interface KelOperation extends Operation permits ${kelPermits} { } -""" - - // Generate DelegatorDependsOperation as a sealed interface - def delegatorDependsFile = new File(modelDir, "DelegatorDependsOperation.java") - delegatorDependsFile.text = """\ -package org.cardanofoundation.signify.generated.keria.model; - -/** - * Marker interface for DelegatorDependsOperation, for protocol operation dependency. - */ -public sealed interface DelegatorDependsOperation extends Operation permits - GroupOperation, - WitnessOperation, - DoneOperation { -} """ } } \ No newline at end of file diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorDependsOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorDependsOperation.java deleted file mode 100644 index 740ccd7c..00000000 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorDependsOperation.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.cardanofoundation.signify.generated.keria.model; - -/** - * Marker interface for DelegatorDependsOperation, for protocol operation dependency. - */ -public sealed interface DelegatorDependsOperation extends Operation permits - GroupOperation, - WitnessOperation, - DoneOperation { -} diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadata.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadata.java index 8cb2adc4..9d91940a 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadata.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DelegatorOperationMetadata.java @@ -21,7 +21,7 @@ import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonValue; import org.cardanofoundation.signify.generated.keria.model.Anchor; -import org.cardanofoundation.signify.generated.keria.model.DelegatorDependsOperation; +import org.cardanofoundation.signify.generated.keria.model.KelOperation; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonTypeName; @@ -50,7 +50,7 @@ public class DelegatorOperationMetadata { public static final String JSON_PROPERTY_DEPENDS = "depends"; @jakarta.annotation.Nullable - private DelegatorDependsOperation depends; + private KelOperation depends; public DelegatorOperationMetadata() { } @@ -130,7 +130,7 @@ public void setAnchor(@jakarta.annotation.Nullable Anchor anchor) { this.anchor = anchor; } - public DelegatorOperationMetadata depends(@jakarta.annotation.Nullable DelegatorDependsOperation depends) { + public DelegatorOperationMetadata depends(@jakarta.annotation.Nullable KelOperation depends) { this.depends = depends; return this; @@ -144,14 +144,14 @@ public DelegatorOperationMetadata depends(@jakarta.annotation.Nullable Delegator @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public DelegatorDependsOperation getDepends() { + public KelOperation getDepends() { return depends; } @JsonProperty(value = JSON_PROPERTY_DEPENDS, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setDepends(@jakarta.annotation.Nullable DelegatorDependsOperation depends) { + public void setDepends(@jakarta.annotation.Nullable KelOperation depends) { this.depends = depends; } diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java index dc8ef6ee..61855d00 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/DoneOperation.java @@ -1,7 +1,7 @@ package org.cardanofoundation.signify.generated.keria.model; -public sealed interface DoneOperation extends KelOperation, DelegatorDependsOperation permits +public sealed interface DoneOperation extends KelOperation permits PendingDoneOperation, CompletedDoneOperation, FailedDoneOperation { diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java index a5c0e55b..56b9fd74 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/GroupOperation.java @@ -1,7 +1,7 @@ package org.cardanofoundation.signify.generated.keria.model; -public sealed interface GroupOperation extends KelOperation, DelegatorDependsOperation permits +public sealed interface GroupOperation extends KelOperation permits PendingGroupOperation, CompletedGroupOperation, FailedGroupOperation { diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java index 81b0e888..d9a72903 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/Operation.java @@ -12,7 +12,6 @@ public sealed interface Operation permits EndRoleOperation, ExchangeOperation, KelOperation, - DelegatorDependsOperation, LocSchemeOperation, OOBIOperation, QueryOperation, diff --git a/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java b/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java index 6f13d30e..a2154caf 100644 --- a/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java +++ b/src/main/java/org/cardanofoundation/signify/generated/keria/model/WitnessOperation.java @@ -1,7 +1,7 @@ package org.cardanofoundation.signify.generated.keria.model; -public sealed interface WitnessOperation extends KelOperation, DelegatorDependsOperation permits +public sealed interface WitnessOperation extends KelOperation permits PendingWitnessOperation, CompletedWitnessOperation, FailedWitnessOperation { From a61c611f59dc5e061d79b2be50802fc3448db2b3 Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Fri, 24 Apr 2026 17:18:03 +0700 Subject: [PATCH 16/20] fix OperationsTest --- .../cardanofoundation/signify/app/coring/Operations.java | 6 +++--- .../org/cardanofoundation/signify/app/OperationsTest.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java b/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java index fd4cf6ba..3f09e05c 100644 --- a/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java +++ b/src/main/java/org/cardanofoundation/signify/app/coring/Operations.java @@ -162,7 +162,7 @@ private static boolean isDone(Operation op) { } private void waitOnDepends(Operation operation, WaitOptions options, long startingTime) throws IOException, InterruptedException, LibsodiumException { - Operation depOp = switch (operation) { + KelOperation depOp = switch (operation) { case DelegatorOperation op when op.getMetadata() != null && op.getMetadata().getDepends() != null -> op.getMetadata().getDepends(); case RegistryOperation op when op.getMetadata() != null @@ -172,8 +172,8 @@ private void waitOnDepends(Operation operation, WaitOptions options, long starti default -> null; }; - if (depOp != null) { - wait(depOp, Operation.class, options, startingTime); + if (depOp != null && !isDone(depOp)) { + wait(depOp, KelOperation.class, options, startingTime); } } diff --git a/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java b/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java index c621ab3c..9915e621 100644 --- a/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java +++ b/src/test/java/org/cardanofoundation/signify/app/OperationsTest.java @@ -217,7 +217,7 @@ void returnsWhenChildOperationIsAlsoDone() throws IOException, InterruptedExcept Operation mainOp = org.cardanofoundation.signify.cesr.util.Utils.fromJson( pendingRegistryWithDependsJson(mainName, depName, false), Operation.class); operations.wait(mainOp, org.cardanofoundation.signify.generated.keria.model.Operation.class, options); - verify(client, times(4)).fetch(anyString(), anyString(), isNull()); + verify(client, times(5)).fetch(anyString(), anyString(), isNull()); } @Test From e598a7a7b941fa02802aeec0e250fb81b2bd71d6 Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Wed, 29 Apr 2026 17:20:04 +0700 Subject: [PATCH 17/20] add util waitForCompleted + use specific ops instead of general Operation --- .../signify/e2e/ChallengesTest.java | 22 +- .../signify/e2e/CredentialsTest.java | 28 +- .../signify/e2e/DelegationMultisigTest.java | 24 +- .../signify/e2e/DelegationTest.java | 12 +- .../signify/e2e/MultisigHolderTest.java | 71 ++--- .../signify/e2e/MultisigInceptionTest.java | 16 +- .../signify/e2e/MultisigJoinTest.java | 20 +- .../signify/e2e/MultisigTest.java | 260 +++++++++--------- .../signify/e2e/RandyTest.java | 6 +- .../signify/e2e/SaltyTests.java | 10 +- .../signify/e2e/SinglesigDIPTest.java | 16 +- .../signify/e2e/SinglesigDRTTest.java | 13 +- .../signify/e2e/SinglesigIXNTest.java | 7 +- .../signify/e2e/SinglesigROTTest.java | 7 +- .../e2e/SinglesigVleiIssuanceTest.java | 6 +- .../signify/e2e/WitnessTest.java | 10 +- .../signify/e2e/utils/MultisigUtils.java | 30 +- .../signify/e2e/utils/TestUtils.java | 60 +++- 18 files changed, 321 insertions(+), 297 deletions(-) diff --git a/src/test/java/org/cardanofoundation/signify/e2e/ChallengesTest.java b/src/test/java/org/cardanofoundation/signify/e2e/ChallengesTest.java index 585d4f8b..3d98427c 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/ChallengesTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/ChallengesTest.java @@ -61,16 +61,13 @@ void ChallengeTest() throws Exception { "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX" )); var icpResult1 = client1.identifiers().create("alice", kargs1); - Operation op1 = waitOperation(client1, icpResult1.op()); - if (op1 instanceof CompletedWitnessOperation completed) { - aid1Prefix = completed.getResponse().getI(); - } + aid1Prefix = waitForCompleted(client1, icpResult1.op(), CompletedWitnessOperation.class).getResponse().getI(); var rpyResult1 = client1.identifiers().addEndRole( "alice", "agent", client1.getAgent().getPre(), null); - waitOperation(client1, rpyResult1.op()); + waitForCompleted(client1, rpyResult1.op()); System.out.println("Alice's AID: " + aid1Prefix); CreateIdentifierArgs kargs2 = new CreateIdentifierArgs(); @@ -81,17 +78,14 @@ void ChallengeTest() throws Exception { "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX" )); var icpResult2 = client2.identifiers().create("bob", kargs2); - Operation op2 = waitOperation(client2, icpResult2.op()); - if (op2 instanceof CompletedWitnessOperation completed) { - aid2Prefix = completed.getResponse().getI(); - } + aid2Prefix = waitForCompleted(client2, icpResult2.op(), CompletedWitnessOperation.class).getResponse().getI(); var rpyResult2 = client2.identifiers().addEndRole( "bob", "agent", client2.getAgent().getPre(), null); - waitOperation(client2, rpyResult2.op()); + waitForCompleted(client2, rpyResult2.op()); // Exchange OOBIs OOBI oobi1 = client1.oobis().get("alice", "agent").get(); @@ -116,13 +110,11 @@ void ChallengeTest() throws Exception { // Alice verifies Bob's response ChallengeOperation verifyResult = client1.challenges().verify(aid2Prefix, challenge1_small.getWords()); - ChallengeOperation verifyOp = waitOperation(client1, verifyResult, ChallengeOperation.class); + CompletedChallengeOperation verifyOp = waitForCompleted(client1, verifyResult, CompletedChallengeOperation.class); System.out.println("Alice verified challenge response"); - if (verifyOp instanceof CompletedChallengeOperation completed) { - ChallengeOperationResponseExn exn = completed.getResponse().getExn(); - client1.challenges().responded(aid2Prefix, exn.getD()); - } + ChallengeOperationResponseExn exn = verifyOp.getResponse().getExn(); + client1.challenges().responded(aid2Prefix, exn.getD()); System.out.println("Alice marked challenge response as accepted"); // Check Bob's challenge in contacts diff --git a/src/test/java/org/cardanofoundation/signify/e2e/CredentialsTest.java b/src/test/java/org/cardanofoundation/signify/e2e/CredentialsTest.java index 77c2a52e..9d44728d 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/CredentialsTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/CredentialsTest.java @@ -116,7 +116,7 @@ public void single_signature_credentials() throws Exception { registryArgs.setRegistryName(registryName); try { RegistryResult regResult = issuerClient.registries().create(registryArgs); - waitOperation(issuerClient, regResult.op()); + waitForCompleted(issuerClient, regResult.op()); } catch (IOException | InterruptedException | DigestException e) { throw new RuntimeException(e); } @@ -178,7 +178,7 @@ public void single_signature_credentials() throws Exception { cData.setA(a); IssueCredentialResult issResult = issuerClient.credentials().issue(issuerAid.name, cData); - waitOperation(issuerClient, issResult.getOp()); + waitForCompleted(issuerClient, issResult.getOp()); return issResult.getAcdc().getKed().get("d").toString(); }); @@ -266,7 +266,7 @@ public void single_signature_credentials() throws Exception { Exchanging.ExchangeMessageResult result = issuerClient.ipex().grant(gArgs); List holderAidPrefix = Collections.singletonList(holderAid.prefix); ExchangeOperation op = issuerClient.ipex().submitGrant(issuerAid.name, result.exn(), result.sigs(), result.atc(), holderAidPrefix); - waitOperation(issuerClient, op); + waitForCompleted(issuerClient, op); } catch (IOException | InterruptedException | DigestException | LibsodiumException e) { throw new RuntimeException(e); } @@ -303,7 +303,7 @@ public void single_signature_credentials() throws Exception { ExchangeOperation op = holderClient.ipex().submitAdmit( holderAid.name, result.exn(), result.sigs(), result.atc(), Collections.singletonList(issuerAid.prefix) ); - waitOperation(holderClient, op); + waitForCompleted(holderClient, op); markAndRemoveNotification(holderClient, grantNotification); } catch (Exception e) { throw new RuntimeException(e); @@ -346,7 +346,7 @@ public void single_signature_credentials() throws Exception { ExchangeOperation op = verifierClient.ipex().submitApply( verifierAid.name, result.exn(), result.sigs(), Collections.singletonList(holderAid.prefix) ); - waitOperation(verifierClient, op); + waitForCompleted(verifierClient, op); } catch (Exception e) { throw new RuntimeException(e); } @@ -396,7 +396,7 @@ public void single_signature_credentials() throws Exception { Exchanging.ExchangeMessageResult result = holderClient.ipex().offer(offerArgs); ExchangeOperation op = holderClient.ipex().submitOffer(holderAid.name, result.exn(), result.sigs(), result.atc(), Collections.singletonList(verifierAid.prefix)); - waitOperation(holderClient, op); + waitForCompleted(holderClient, op); } catch (Exception e) { throw new RuntimeException(e); } @@ -435,7 +435,7 @@ public void single_signature_credentials() throws Exception { ExchangeOperation op = verifierClient.ipex().submitAgree( verifierAid.name, result.exn(), result.sigs(), Collections.singletonList(holderAid.prefix) ); - waitOperation(verifierClient, op); + waitForCompleted(verifierClient, op); } catch (Exception e) { throw new RuntimeException(e); } @@ -480,7 +480,7 @@ public void single_signature_credentials() throws Exception { ExchangeOperation op = holderClient.ipex().submitGrant( holderAid.name, result.exn(), result.sigs(), result.atc(), Collections.singletonList(verifierAid.prefix) ); - waitOperation(holderClient, op); + waitForCompleted(holderClient, op); } catch (Exception e) { throw new RuntimeException(e); } @@ -510,7 +510,7 @@ public void single_signature_credentials() throws Exception { ExchangeOperation op = verifierClient.ipex().submitAdmit( verifierAid.name, result.exn(), result.sigs(), result.atc(), Collections.singletonList(holderAid.prefix) ); - waitOperation(verifierClient, op); + waitForCompleted(verifierClient, op); markAndRemoveNotification(verifierClient, verifierGrantNote); Credential verifierCredential = verifierClient.credentials().get(qviCredentialId).get(); @@ -547,7 +547,7 @@ public void single_signature_credentials() throws Exception { try { RegistryResult regResult = holderClient.registries().create(registryArgs); - waitOperation(holderClient, regResult.op()); + waitForCompleted(holderClient, regResult.op()); List registriesList = holderClient.registries().list(holderAid.name); assertTrue(!registriesList.isEmpty()); @@ -595,7 +595,7 @@ public void single_signature_credentials() throws Exception { cData.setE(e); IssueCredentialResult result = holderClient.credentials().issue(holderAid.name, cData); - waitOperation(holderClient, result.getOp()); + waitForCompleted(holderClient, result.getOp()); return result.getAcdc().getKed().get("d").toString(); } catch (Exception e) { throw new RuntimeException(e); @@ -621,7 +621,7 @@ public void single_signature_credentials() throws Exception { ExchangeOperation op = holderClient.ipex().submitGrant( holderAid.name, result.exn(), result.sigs(), result.atc(), Collections.singletonList(legalEntityAid.prefix) ); - waitOperation(holderClient, op); + waitForCompleted(holderClient, op); } catch (Exception e) { throw new RuntimeException(e); } @@ -643,7 +643,7 @@ public void single_signature_credentials() throws Exception { ExchangeOperation op = legalEntityClient.ipex().submitAdmit( legalEntityAid.name, result.exn(), result.sigs(), result.atc(), Collections.singletonList(holderAid.prefix) ); - waitOperation(legalEntityClient, op); + waitForCompleted(legalEntityClient, op); markAndRemoveNotification(legalEntityClient, grantNotification); } catch (Exception e) { throw new RuntimeException(e); @@ -688,7 +688,7 @@ public void single_signature_credentials() throws Exception { testSteps.step("Issuer revoke QVI credential", () -> { try { RevokeCredentialResult revokeOperation = issuerClient.credentials().revoke(issuerAid.name, qviCredentialId, null); - waitOperation(issuerClient, revokeOperation.getOp()); + waitForCompleted(issuerClient, revokeOperation.getOp()); Credential issuerCredential = issuerClient.credentials().get(qviCredentialId).get(); CredentialState status = issuerCredential.getStatus(); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/DelegationMultisigTest.java b/src/test/java/org/cardanofoundation/signify/e2e/DelegationMultisigTest.java index ab0f3906..d0b2a02d 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/DelegationMultisigTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/DelegationMultisigTest.java @@ -6,7 +6,11 @@ import org.cardanofoundation.signify.e2e.utils.Retry; import org.cardanofoundation.signify.e2e.utils.TestSteps; import org.cardanofoundation.signify.e2e.utils.TestUtils; +import org.cardanofoundation.signify.e2e.utils.TestUtils.Notification; +import org.cardanofoundation.signify.generated.keria.model.CompletedDelegatorOperation; +import org.cardanofoundation.signify.generated.keria.model.DelegatorOperation; import org.cardanofoundation.signify.generated.keria.model.HabState; +import org.cardanofoundation.signify.generated.keria.model.KelOperation; import org.cardanofoundation.signify.generated.keria.model.OOBI; import org.cardanofoundation.signify.generated.keria.model.Operation; import org.cardanofoundation.signify.generated.keria.model.QueryOperation; @@ -87,7 +91,7 @@ void delegationMultisigTest() throws Exception { // First member start the creation of a multisig identifier // Create a multisig AID for the GEDA. // Skip if a GEDA AID has already been incepted. - Operation otor1 = testSteps.step(String.format("%s(%s) initiated delegator multisig, waiting for %s(%s) to join...", + KelOperation otor1 = testSteps.step(String.format("%s(%s) initiated delegator multisig, waiting for %s(%s) to join...", delegator1Name, delegator1Aid.getPrefix(), delegator2Name, delegator2Aid.getPrefix()), () -> { MultisigUtils.StartMultisigInceptArgs startMultisigInceptArgs = MultisigUtils.StartMultisigInceptArgs @@ -129,7 +133,7 @@ void delegationMultisigTest() throws Exception { .msgSaid(ntor.getA().getD()) .build(); - Operation otor2 = MultisigUtils.acceptMultisigIncept(delegator2Client, acceptMultisigInceptArgs); + KelOperation otor2 = MultisigUtils.acceptMultisigIncept(delegator2Client, acceptMultisigInceptArgs); String torpre = otor1.getName().split("\\.")[1]; @@ -197,7 +201,7 @@ void delegationMultisigTest() throws Exception { new GetOrCreateContactArgs(delegatee2Client, delegateeGroupName, oobiGtor) ); - Operation opDelegatee1 = testSteps.step(delegatee1Name + "(" + delegatee1Aid.getPrefix() + ") initiated delegatee multisig, waiting for " + KelOperation opDelegatee1 = testSteps.step(delegatee1Name + "(" + delegatee1Aid.getPrefix() + ") initiated delegatee multisig, waiting for " + delegatee2Name + "(" + delegatee2Aid.getPrefix() + ") to join...", () -> { MultisigUtils.StartMultisigInceptArgs startMultisigInceptArgs = MultisigUtils.StartMultisigInceptArgs .builder() @@ -231,7 +235,7 @@ void delegationMultisigTest() throws Exception { .groupName(delegateeGroupName) .msgSaid(ntee.getA().getD()) .build(); - Operation opDelegatee2 = MultisigUtils.acceptMultisigIncept(delegatee2Client, acceptMultisigInceptArgs); + KelOperation opDelegatee2 = MultisigUtils.acceptMultisigIncept(delegatee2Client, acceptMultisigInceptArgs); System.out.println(delegatee2Name + " joined multisig, waiting for delegator..."); HabState agtee1 = delegatee1Client.identifiers().get(delegateeGroupName).get(); @@ -252,7 +256,7 @@ void delegationMultisigTest() throws Exception { }}; try { - Operation delApprOp1 = MultisigUtils.delegateMultisig( + DelegatorOperation delApprOp1 = MultisigUtils.delegateMultisig( delegator1Client, delegator1Aid, Collections.singletonList(delegator2Aid), @@ -260,7 +264,7 @@ void delegationMultisigTest() throws Exception { anchor, true); - Operation delApprOp2 = MultisigUtils.delegateMultisig( + DelegatorOperation delApprOp2 = MultisigUtils.delegateMultisig( delegator2Client, delegator2Aid, Collections.singletonList(delegator1Aid), @@ -268,11 +272,11 @@ void delegationMultisigTest() throws Exception { anchor, false); - Operation dresult1 = waitOperation(delegator1Client, delApprOp1); - Object responseDresult1 = dresult1.getName(); + CompletedDelegatorOperation dresult1 = waitForCompleted(delegator1Client, delApprOp1, CompletedDelegatorOperation.class); + String responseDresult1 = dresult1.getName(); - Operation dresult2 = waitOperation(delegator2Client, delApprOp2); - Object responseDresult2 = dresult2.getName(); + CompletedDelegatorOperation dresult2 = waitForCompleted(delegator2Client, delApprOp2, CompletedDelegatorOperation.class); + String responseDresult2 = dresult2.getName(); assertEquals(responseDresult1, responseDresult2); waitAndMarkNotification(delegator1Client, "/multisig/ixn"); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/DelegationTest.java b/src/test/java/org/cardanofoundation/signify/e2e/DelegationTest.java index ad12c9b2..d82fbaaf 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/DelegationTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/DelegationTest.java @@ -62,7 +62,7 @@ void delegationTest() throws Exception { "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX")); kargs.setWits(wits); var icpResult1 = client1.identifiers().create("delegator", kargs); - waitOperation(client1, icpResult1.op()); + waitForCompleted(client1, icpResult1.op()); HabState ator = client1.identifiers().get("delegator").get(); var rpyResult1 = client1.identifiers().addEndRole( @@ -71,7 +71,7 @@ void delegationTest() throws Exception { client1.getAgent().getPre(), null ); - waitOperation(client1, rpyResult1.op()); + waitForCompleted(client1, rpyResult1.op()); // Client 2 resolves delegator OOBI OOBI oobi1 = client1.oobis().get("delegator", "agent").get(); @@ -98,7 +98,7 @@ void delegationTest() throws Exception { testSteps.step("delegator approves delegation", () -> { var result = retry(unchecked(() -> { var apprDelRes = client1.delegations().approve("delegator", anchor); - waitOperation(client1, apprDelRes.op()); + waitForCompleted(client1, apprDelRes.op()); return apprDelRes; })); List> approDelResList = (List>) result.serder().getKed().get("a"); @@ -106,10 +106,10 @@ void delegationTest() throws Exception { }); QueryOperation op3 = client2.keyStates().query(ator.getPrefix(), "1", null); - waitOperation(client2, op3); + waitForCompleted(client2, op3); // Client 2 check approval - waitOperation(client2, op2); + waitForCompleted(client2, op2); HabState aid2 = client2.identifiers().get("delegate").get(); assertEquals(delegatePrefix, aid2.getPrefix()); System.out.println("Delegation approved for aid: " + aid2.getPrefix()); @@ -123,7 +123,7 @@ void delegationTest() throws Exception { client2.getAgent().getPre(), null ); - waitOperation(client2, rpyResult2.op()); + waitForCompleted(client2, rpyResult2.op()); Object oobis = client2.oobis().get("delegate", null).get(); OOBI oobiBody = (OOBI) oobis; List oobisResponse = oobiBody.getOobis(); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigHolderTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigHolderTest.java index a0b08cbd..1bb8da74 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigHolderTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigHolderTest.java @@ -16,12 +16,15 @@ import org.cardanofoundation.signify.generated.keria.model.Credential; import org.cardanofoundation.signify.generated.keria.model.CredentialSad; import org.cardanofoundation.signify.generated.keria.model.CredentialState; +import org.cardanofoundation.signify.generated.keria.model.EndRoleOperation; import org.cardanofoundation.signify.generated.keria.model.ExchangeResource; import org.cardanofoundation.signify.generated.keria.model.ExchangeOperation; import org.cardanofoundation.signify.generated.keria.model.Exn; import org.cardanofoundation.signify.generated.keria.model.ExnMultisig; import org.cardanofoundation.signify.generated.keria.model.GroupMember; +import org.cardanofoundation.signify.generated.keria.model.GroupOperation; import org.cardanofoundation.signify.generated.keria.model.HabState; +import org.cardanofoundation.signify.generated.keria.model.KelOperation; import org.cardanofoundation.signify.core.Eventing; import org.cardanofoundation.signify.e2e.utils.MultisigUtils.AcceptMultisigInceptArgs; import org.cardanofoundation.signify.e2e.utils.MultisigUtils.StartMultisigInceptArgs; @@ -29,7 +32,9 @@ import org.cardanofoundation.signify.e2e.utils.ResolveEnv; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; import org.cardanofoundation.signify.generated.keria.model.OOBI; +import org.cardanofoundation.signify.generated.keria.model.OOBIOperation; import org.cardanofoundation.signify.generated.keria.model.Operation; +import org.cardanofoundation.signify.generated.keria.model.PendingGroupOperation; import org.cardanofoundation.signify.generated.keria.model.Registry; import org.cardanofoundation.signify.generated.keria.model.RegistryOperation; import org.junit.jupiter.api.DisplayName; @@ -96,32 +101,32 @@ void multisigHolderTest() throws Exception { oobis2 = getOobisIndexAt0(oobis.get(1)); oobis3 = getOobisIndexAt0(oobis.get(2)); - Operation op1 = client1.oobis().resolve(oobis2, "member2"); - op1 = waitOperation(client1, op1); + OOBIOperation op1 = client1.oobis().resolve(oobis2, "member2"); + waitForCompleted(client1, op1); op1 = client1.oobis().resolve(oobis3, "member3"); - op1 = waitOperation(client1, op1); + waitForCompleted(client1, op1); op1 = client1.oobis().resolve(SCHEMA_OOBI, "schema"); - op1 = waitOperation(client1, op1); + waitForCompleted(client1, op1); System.out.println("Member1 resolved 3 OOBIs"); - Operation op2 = client2.oobis().resolve(oobis1, "member1"); - op2 = waitOperation(client2, op2); + OOBIOperation op2 = client2.oobis().resolve(oobis1, "member1"); + waitForCompleted(client2, op2); op2 = client2.oobis().resolve(oobis3, "member3"); - op2 = waitOperation(client2, op2); + waitForCompleted(client2, op2); op2 = client2.oobis().resolve(SCHEMA_OOBI, "schema"); - op2 = waitOperation(client2, op2); + waitForCompleted(client2, op2); System.out.println("Member2 resolved 3 OOBIs"); - Operation op3 = client3.oobis().resolve(oobis1, "member1"); - op3 = waitOperation(client3, op3); + OOBIOperation op3 = client3.oobis().resolve(oobis1, "member1"); + waitForCompleted(client3, op3); op3 = client3.oobis().resolve(oobis2, "member2"); - op3 = waitOperation(client3, op3); + waitForCompleted(client3, op3); op3 = client3.oobis().resolve(SCHEMA_OOBI, "schema"); - op3 = waitOperation(client3, op3); + waitForCompleted(client3, op3); System.out.println("Member3 resolved 3 OOBIs"); // First member start the creation of a multisig identifier - op1 = startMultisigIncept(client1, new StartMultisigInceptArgs( + KelOperation gop1 = startMultisigIncept(client1, new StartMultisigInceptArgs( "holder", aid1.getName(), Arrays.asList(aid1.getPrefix(), aid2.getPrefix()), @@ -136,7 +141,7 @@ void multisigHolderTest() throws Exception { // Second member check notifications and join the multisig String msgSaid = waitAndMarkNotification(client2, "/multisig/icp"); System.out.println("Member2 received exchange message to join multisig"); - op2 = acceptMultisigIncept(client2, new AcceptMultisigInceptArgs( + KelOperation gop2 = acceptMultisigIncept(client2, new AcceptMultisigInceptArgs( "holder", aid2.getName(), msgSaid @@ -144,8 +149,8 @@ void multisigHolderTest() throws Exception { System.out.println("Member2 joined multisig, waiting for others..."); // Check for completion - op1 = waitOperation(client1, op1); - op2 = waitOperation(client2, op2); + waitForCompleted(client1, gop1); + waitForCompleted(client2, gop2); System.out.println("Multisig created!"); IdentifierListResponse identifiers1 = client1.identifiers().list(); @@ -185,7 +190,7 @@ void multisigHolderTest() throws Exception { String timestamp = createTimestamp(); var endRoleRes = client1.identifiers().addEndRole("holder", "agent", eid1, timestamp); - op1 = endRoleRes.op(); + EndRoleOperation eop1 = endRoleRes.op(); Serder rpy = endRoleRes.serder(); List sigs = endRoleRes.sigs(); @@ -238,7 +243,7 @@ void multisigHolderTest() throws Exception { endRoleRes = client2. identifiers(). addEndRole("holder", rpyrole, rpyeid, rpystamp); - op2 = endRoleRes.op(); + EndRoleOperation eop2 = endRoleRes.op(); rpy = endRoleRes.serder(); sigs = endRoleRes.sigs(); @@ -279,15 +284,15 @@ void multisigHolderTest() throws Exception { System.out.println("Member2 authorized agent role to %s, waiting for others to authorize..." + eid1); // Check for completion - op1 = waitOperation(client1, op1); - op2 = waitOperation(client2, op2); + waitForCompleted(client1, eop1); + waitForCompleted(client2, eop2); System.out.println("End role authorization for agent " + eid1 + " completed!"); System.out.println("Starting multisig end role authorization for agent " + eid2); endRoleRes = client1.identifiers() .addEndRole("holder", "agent", eid2, timestamp); - op1 = endRoleRes.op(); + eop1 = endRoleRes.op(); rpy = endRoleRes.serder(); sigs = endRoleRes.sigs(); @@ -342,7 +347,7 @@ void multisigHolderTest() throws Exception { endRoleRes = client2. identifiers(). addEndRole("holder", rpyrole, rpyeid, rpystamp); - op2 = endRoleRes.op(); + eop2 = endRoleRes.op(); rpy = endRoleRes.serder(); sigs = endRoleRes.sigs(); @@ -384,8 +389,8 @@ void multisigHolderTest() throws Exception { System.out.println("Member2 authorized agent role to %s, waiting for others to authorize..." + eid1); // Check for completion - op1 = waitOperation(client1, op1); - op2 = waitOperation(client2, op2); + waitForCompleted(client1, eop1); + waitForCompleted(client2, eop2); System.out.println("End role authorization for agent " + eid2 + " completed!"); // Holder resolve multisig OOBI @@ -393,8 +398,8 @@ void multisigHolderTest() throws Exception { List oobisResponse = oobisRes.getOobis(); String oobiMultisig = oobisResponse.get(0).split("/agent/")[0]; - op3 = client3.oobis().resolve(oobiMultisig, "holder"); - waitOperation(client3, op3); + OOBIOperation oop3 = client3.oobis().resolve(oobiMultisig, "holder"); + waitForCompleted(client3, oop3); System.out.println("Issuer resolved multisig holder OOBI"); HabState holderAid = client1.identifiers().get("holder").get(); @@ -434,7 +439,7 @@ void multisigHolderTest() throws Exception { Exn getExn = exnRes.getExn(); - op1 = multisigAdmitCredential(client1, + ExchangeOperation exop1 = multisigAdmitCredential(client1, "holder", "member1", getExn.getD(), @@ -458,7 +463,7 @@ void multisigHolderTest() throws Exception { .map(KeyStateRecord::getI) .toList(); - op2 = multisigAdmitCredential(client2, + ExchangeOperation exop2 = multisigAdmitCredential(client2, "holder", "member2", getExn.getD(), @@ -467,8 +472,8 @@ void multisigHolderTest() throws Exception { ); System.out.println("Member1 admitted credential with SAID : " + exnGetAcdc.get("d")); - waitOperation(client1, op1); - waitOperation(client2, op2); + waitForCompleted(client1, exop1); + waitForCompleted(client2, exop2); CredentialFilter args = CredentialFilter.builder().build(); List creds1 = client1.credentials().list(args); @@ -507,7 +512,7 @@ public Object createRegistry(SignifyClient client, String name, String registryN RegistryResult result = client.registries().create(args); RegistryOperation op = result.op(); - waitOperation(client, op); + waitForCompleted(client, op); List registryList = client.registries().list(name); Registry opResponseName = registryList.get(0); @@ -523,7 +528,7 @@ public Object issueCredential( CredentialData data ) throws Exception { IssueCredentialResult result = client.credentials().issue(name, data); - waitOperation(client, result.getOp()); + waitForCompleted(client, result.getOp()); List listCreds = client.credentials().list(CredentialFilter.builder().build()); Credential cred = listCreds.getFirst(); @@ -554,7 +559,7 @@ public Object issueCredential( ExchangeOperation op = client .ipex() .submitGrant(name, grant, gsigs, end, List.of(data.getA().getI())); - waitOperation(client, op); + waitForCompleted(client, op); } System.out.println("Grant message sent"); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigInceptionTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigInceptionTest.java index 2fd72e78..7f09bfa1 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigInceptionTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigInceptionTest.java @@ -1,13 +1,13 @@ package org.cardanofoundation.signify.e2e; import org.cardanofoundation.signify.app.clienting.SignifyClient; -import org.cardanofoundation.signify.cesr.util.Utils; import org.cardanofoundation.signify.e2e.utils.MultisigUtils; import org.cardanofoundation.signify.e2e.utils.TestSteps; import org.cardanofoundation.signify.e2e.utils.TestUtils; import org.cardanofoundation.signify.e2e.utils.TestUtils.Notification; import org.cardanofoundation.signify.generated.keria.model.GroupMember; import org.cardanofoundation.signify.generated.keria.model.HabState; +import org.cardanofoundation.signify.generated.keria.model.KelOperation; import org.cardanofoundation.signify.generated.keria.model.OOBI; import org.cardanofoundation.signify.generated.keria.model.Operation; import org.junit.jupiter.api.Test; @@ -18,7 +18,7 @@ import static org.cardanofoundation.signify.e2e.utils.MultisigUtils.acceptMultisigIncept; import static org.cardanofoundation.signify.e2e.utils.MultisigUtils.startMultisigIncept; -import static org.cardanofoundation.signify.e2e.utils.TestUtils.waitOperation; +import static org.cardanofoundation.signify.e2e.utils.TestUtils.waitForCompleted; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -48,7 +48,7 @@ public void testMultisigInception() throws Exception { testSteps.step("Create multisig group", () -> { String groupName = "multisig"; - Operation op1 = startMultisigIncept(client1, MultisigUtils.StartMultisigInceptArgs.builder() + KelOperation op1 = startMultisigIncept(client1, MultisigUtils.StartMultisigInceptArgs.builder() .groupName(groupName) .localMemberName("member1") .participants(Arrays.asList(aid1, aid2)) @@ -71,7 +71,7 @@ public void testMultisigInception() throws Exception { String msgSaid = notifications.getLast().getA().getD(); assertNotNull(msgSaid, "msgSaid not defined"); - Operation op2 = acceptMultisigIncept(client2, MultisigUtils.AcceptMultisigInceptArgs.builder() + KelOperation op2 = acceptMultisigIncept(client2, MultisigUtils.AcceptMultisigInceptArgs.builder() .localMemberName("member2") .groupName(groupName) .msgSaid(msgSaid) @@ -101,7 +101,7 @@ public void testMultisigInception() throws Exception { testSteps.step("Test creating another group", () -> { String groupName = "multisig2"; - Operation op1 = startMultisigIncept(client1, MultisigUtils.StartMultisigInceptArgs.builder() + KelOperation op1 = startMultisigIncept(client1, MultisigUtils.StartMultisigInceptArgs.builder() .groupName(groupName) .localMemberName("member1") .participants(List.of(aid1, aid2)) @@ -121,15 +121,15 @@ public void testMultisigInception() throws Exception { String msgSaid = notifications.getLast().getA().getD(); assertNotNull(msgSaid, "msgSaid not defined"); - Operation op2 = acceptMultisigIncept(client2, MultisigUtils.AcceptMultisigInceptArgs.builder() + KelOperation op2 = acceptMultisigIncept(client2, MultisigUtils.AcceptMultisigInceptArgs.builder() .localMemberName("member2") .groupName(groupName) .msgSaid(msgSaid) .build() ); - op1 = waitOperation(client1, op1); - op2 = waitOperation(client2, op2); + waitForCompleted(client1, op1); + waitForCompleted(client2, op2); // TODO: https://github.com/WebOfTrust/keria/issues/189 // const members = await client1.identifiers().members(groupName); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigJoinTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigJoinTest.java index ac627dfd..50957035 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigJoinTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigJoinTest.java @@ -13,7 +13,9 @@ import org.cardanofoundation.signify.generated.keria.model.Exn; import org.cardanofoundation.signify.generated.keria.model.ExnMultisig; import org.cardanofoundation.signify.generated.keria.model.GroupMember; +import org.cardanofoundation.signify.generated.keria.model.GroupOperation; import org.cardanofoundation.signify.generated.keria.model.HabState; +import org.cardanofoundation.signify.generated.keria.model.KelOperation; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; import org.cardanofoundation.signify.generated.keria.model.CompletedQueryOperation; import org.cardanofoundation.signify.generated.keria.model.OOBI; @@ -27,7 +29,6 @@ import static org.cardanofoundation.signify.e2e.utils.TestUtils.*; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class MultisigJoinTest extends BaseIntegrationTest { @@ -87,7 +88,7 @@ public void multisigJoinTest() throws Exception { var icpResult = client1.identifiers().create(nameMultisig, kargs); - Operation createMultisig1 = icpResult.op(); + KelOperation createMultisig1 = icpResult.op(); Serder serder = icpResult.serder(); List sigs = icpResult.sigs(); List sigers = sigs.stream() @@ -135,9 +136,9 @@ public void multisigJoinTest() throws Exception { var icpResult2 = client2.identifiers().create(nameMultisig, iargs2); - Operation createMultisig2 = icpResult2.op(); + KelOperation createMultisig2 = icpResult2.op(); - List op = waitOperationAsync( + waitOperationAsync( new WaitOperationArgs(client1, createMultisig1), new WaitOperationArgs(client2, createMultisig2) ); @@ -400,7 +401,7 @@ public void signingKeysAndJoinTest() throws Exception { Keeping.Keeper keeper3 = client3.getManager().get(aid3); List sig3 = keeper3.sign(serder3.getRaw().getBytes()).signatures(); - Operation joinOperation = Utils.fromJson(Utils.jsonStringify(client3.groups() + GroupOperation joinOperation = Utils.fromJson(Utils.jsonStringify(client3.groups() .join( nameMultisig, serder3, @@ -408,9 +409,8 @@ public void signingKeysAndJoinTest() throws Exception { Utils.toMap(exn3.getA()).get("gid").toString(), smids, rmids - )), Operation.class); - - waitOperation(client3, joinOperation); + )), GroupOperation.class); + waitForCompleted(client3, joinOperation); HabState multiSigAid = client3.identifiers().get(nameMultisig).get(); @@ -428,9 +428,7 @@ public void signingKeysAndJoinTest() throws Exception { String eid = members.getSigning().get(2).getEnds().getAgent().keySet().iterator().next(); var endRoleOperation = client3.identifiers().addEndRole(nameMultisig, "agent", eid, null); - Operation endRoleResult = waitOperation(client3, endRoleOperation.op()); - - assertNotNull(endRoleResult); + waitForCompleted(client3, endRoleOperation.op()); } public static HabState createAID(SignifyClient client, String name, List wits) throws Exception { diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java index 68ee6094..6e56fbf0 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java @@ -22,13 +22,19 @@ import org.cardanofoundation.signify.core.Eventing; import org.cardanofoundation.signify.core.Manager; import org.cardanofoundation.signify.generated.keria.model.AidRecord; +import org.cardanofoundation.signify.generated.keria.model.ChallengeOperation; import org.cardanofoundation.signify.generated.keria.model.Credential; +import org.cardanofoundation.signify.generated.keria.model.CredentialOperation; +import org.cardanofoundation.signify.generated.keria.model.ExchangeOperation; import org.cardanofoundation.signify.generated.keria.model.Exn; import org.cardanofoundation.signify.generated.keria.model.ExchangeResource; import org.cardanofoundation.signify.generated.keria.model.ExnMultisig; import org.cardanofoundation.signify.generated.keria.model.GroupMember; +import org.cardanofoundation.signify.generated.keria.model.GroupOperation; import org.cardanofoundation.signify.generated.keria.model.HabState; +import org.cardanofoundation.signify.generated.keria.model.KelOperation; import org.cardanofoundation.signify.generated.keria.model.Operation; +import org.cardanofoundation.signify.generated.keria.model.QueryOperation; import org.cardanofoundation.signify.generated.keria.model.CompletedChallengeOperation; import org.cardanofoundation.signify.generated.keria.model.CompletedQueryOperation; import org.cardanofoundation.signify.generated.keria.model.RegistryOperation; @@ -37,6 +43,7 @@ import org.cardanofoundation.signify.e2e.utils.TestUtils; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; import org.cardanofoundation.signify.generated.keria.model.OOBI; +import org.cardanofoundation.signify.generated.keria.model.OOBIOperation; import org.junit.jupiter.api.Test; import java.io.IOException; @@ -102,44 +109,44 @@ public void multisig() throws Exception { String oobis3 = getOobisIndexAt0(oobi3); String oobis4 = getOobisIndexAt0(oobi4); - Operation op1 = client1.oobis().resolve(oobis2, "member2"); - op1 = waitOperation(client1, op1); - op1 = client1.oobis().resolve(oobis3, "member3"); - op1 = waitOperation(client1, op1); - op1 = client1.oobis().resolve(SCHEMA_OOBI, "schema"); - op1 = waitOperation(client1, op1); - op1 = client1.oobis().resolve(oobis4, "holder"); - op1 = waitOperation(client1, op1); + OOBIOperation oop = client1.oobis().resolve(oobis2, "member2"); + waitForCompleted(client1, oop); + oop = client1.oobis().resolve(oobis3, "member3"); + waitForCompleted(client1, oop); + oop = client1.oobis().resolve(SCHEMA_OOBI, "schema"); + waitForCompleted(client1, oop); + oop = client1.oobis().resolve(oobis4, "holder"); + waitForCompleted(client1, oop); System.out.println("Member1 resolved 4 OOBIs"); - Operation op2 = client2.oobis().resolve(oobis1, "member1"); - op2 = waitOperation(client2, op2); - op2 = client2.oobis().resolve(oobis3, "member3"); - op2 = waitOperation(client2, op2); - op2 = client2.oobis().resolve(SCHEMA_OOBI, "schema"); - op2 = waitOperation(client2, op2); - op2 = client2.oobis().resolve(oobis4, "holder"); - op2 = waitOperation(client2, op2); + oop = client2.oobis().resolve(oobis1, "member1"); + waitForCompleted(client2, oop); + oop = client2.oobis().resolve(oobis3, "member3"); + waitForCompleted(client2, oop); + oop = client2.oobis().resolve(SCHEMA_OOBI, "schema"); + waitForCompleted(client2, oop); + oop = client2.oobis().resolve(oobis4, "holder"); + waitForCompleted(client2, oop); System.out.println("Member2 resolved 4 OOBIs"); - Operation op3 = client3.oobis().resolve(oobis1, "member1"); - op3 = waitOperation(client3, op3); - op3 = client3.oobis().resolve(oobis2, "member2"); - op3 = waitOperation(client3, op3); - op3 = client3.oobis().resolve(SCHEMA_OOBI, "schema"); - op3 = waitOperation(client3, op3); - op3 = client3.oobis().resolve(oobis4, "holder"); - op3 = waitOperation(client3, op3); + oop = client3.oobis().resolve(oobis1, "member1"); + waitForCompleted(client3, oop); + oop = client3.oobis().resolve(oobis2, "member2"); + waitForCompleted(client3, oop); + oop = client3.oobis().resolve(SCHEMA_OOBI, "schema"); + waitForCompleted(client3, oop); + oop = client3.oobis().resolve(oobis4, "holder"); + waitForCompleted(client3, oop); System.out.println("Member3 resolved 4 OOBIs"); - Operation op4 = client4.oobis().resolve(oobis1, "member1"); - op4 = waitOperation(client4, op4); - op4 = client4.oobis().resolve(oobis2, "member2"); - op4 = waitOperation(client4, op4); - op4 = client4.oobis().resolve(oobis3, "member3"); - op4 = waitOperation(client4, op4); - op4 = client4.oobis().resolve(SCHEMA_OOBI, "schema"); - op4 = waitOperation(client4, op4); + oop = client4.oobis().resolve(oobis1, "member1"); + waitForCompleted(client4, oop); + oop = client4.oobis().resolve(oobis2, "member2"); + waitForCompleted(client4, oop); + oop = client4.oobis().resolve(oobis3, "member3"); + waitForCompleted(client4, oop); + oop = client4.oobis().resolve(SCHEMA_OOBI, "schema"); + waitForCompleted(client4, oop); System.out.println("Holder resolved 4 OOBIs"); @@ -155,17 +162,15 @@ public void multisig() throws Exception { client3.challenges().respond("member3", aid1.getPrefix(), words); System.out.println("Member3 responded challenge with signed words"); - op1 = client1.challenges().verify(aid2.getPrefix(), words); - op1 = waitOperation(client1, op1); + ChallengeOperation chop1 = client1.challenges().verify(aid2.getPrefix(), words); + String exnD = waitForCompleted(client1, chop1, CompletedChallengeOperation.class).getResponse().getExn().getD(); System.out.println("Member1 verified challenge response from member2"); - String exnD = ((CompletedChallengeOperation) op1).getResponse().getExn().getD(); client1.challenges().responded(aid2.getPrefix(), exnD); System.out.println("Member1 marked challenge response as accepted"); - op1 = client1.challenges().verify(aid3.getPrefix(), words); - op1 = waitOperation(client1, op1); + ChallengeOperation chop2 = client1.challenges().verify(aid3.getPrefix(), words); + exnD = waitForCompleted(client1, chop2, CompletedChallengeOperation.class).getResponse().getExn().getD(); System.out.println("Member1 verified challenge response from member3"); - exnD = ((CompletedChallengeOperation) op1).getResponse().getExn().getD(); client1.challenges().responded(aid3.getPrefix(), exnD); System.out.println("Member1 marked challenge response as accepted"); @@ -185,7 +190,7 @@ public void multisig() throws Exception { .build(); kargsMultisigAID.setMhab(aid1); - op1 = MultisigUtils.createAIDMultisig( + GroupOperation gop1 = MultisigUtils.createAIDMultisig( client1, aid1, List.of(aid2, aid3), @@ -196,7 +201,7 @@ public void multisig() throws Exception { System.out.println("Member1 initiated multisig, waiting for others to join..."); kargsMultisigAID.setMhab(aid2); - op2 = MultisigUtils.createAIDMultisig( + GroupOperation gop2 = MultisigUtils.createAIDMultisig( client2, aid2, List.of(aid1, aid3), @@ -207,7 +212,7 @@ public void multisig() throws Exception { System.out.println("Member2 joins multisig group, waiting for others..."); kargsMultisigAID.setMhab(aid3); - op3 = MultisigUtils.createAIDMultisig( + GroupOperation gop3 = MultisigUtils.createAIDMultisig( client3, aid3, List.of(aid1, aid2), @@ -219,9 +224,9 @@ public void multisig() throws Exception { // Check for completion waitOperationAsync( - new WaitOperationArgs(client1, op1), - new WaitOperationArgs(client2, op2), - new WaitOperationArgs(client3, op3) + new WaitOperationArgs(client1, gop1), + new WaitOperationArgs(client2, gop2), + new WaitOperationArgs(client3, gop3) ); System.out.println("Multisig created!"); @@ -267,8 +272,6 @@ public void multisig() throws Exception { aids3.get(1).getPrefix() ); - String multisig = aids3.get(1).getPrefix(); - HabState multisigAID = client1.identifiers().get("multisig").get(); String timestamp = TestUtils.createTimestamp(); @@ -314,8 +317,8 @@ public void multisig() throws Exception { // Holder resolve multisig OOBI OOBI oobimultisig = client1.oobis().get("multisig", "agent").get(); - op4 = client4.oobis().resolve(getOobisIndexAt0(oobimultisig), "multisig"); - waitOperation(client4, op4); + oop = client4.oobis().resolve(getOobisIndexAt0(oobimultisig), "multisig"); + waitForCompleted(client4, oop); System.out.println("Holder resolved multisig OOBI"); // MultiSig Interaction @@ -325,7 +328,7 @@ public void multisig() throws Exception { data.put("s", "0"); data.put("d", "EBgew7O4yp8SBle0FU-wwN3GtnaroI0BQfBGAj33QiIG"); - op1 = MultisigUtils.interactMultisig( + KelOperation kop1 = MultisigUtils.interactMultisig( client1, "multisig", aid1, @@ -336,7 +339,7 @@ public void multisig() throws Exception { ); System.out.println("Member1 initiates interaction event, waiting for others to join..."); - op2 = MultisigUtils.interactMultisig( + KelOperation kop2 = MultisigUtils.interactMultisig( client2, "multisig", aid2, @@ -347,7 +350,7 @@ public void multisig() throws Exception { ); System.out.println("Member2 joins interaction event, waiting for others..."); - op3 = MultisigUtils.interactMultisig( + KelOperation kop3 = MultisigUtils.interactMultisig( client3, "multisig", aid3, @@ -360,66 +363,54 @@ public void multisig() throws Exception { // Check for completion waitOperationAsync( - new WaitOperationArgs(client1, op1), - new WaitOperationArgs(client2, op2), - new WaitOperationArgs(client3, op3) + new WaitOperationArgs(client1, kop1), + new WaitOperationArgs(client2, kop2), + new WaitOperationArgs(client3, kop3) ); System.out.println("Multisig interaction completed!"); // Members agree out of band to rotate keys System.out.println("Members agree out of band to rotate keys"); var icpResult1 = client1.identifiers().rotate("member1"); - op1 = icpResult1.op(); - op1 = waitOperation(client1, op1); + kop1 = icpResult1.op(); + waitForCompleted(client1, kop1); aid1 = client1.identifiers().get("member1").get(); System.out.println("Member1 rotated keys"); var icpResult2 = client2.identifiers().rotate("member2"); - op2 = icpResult2.op(); - op2 = waitOperation(client2, op2); + kop2 = icpResult2.op(); + waitForCompleted(client2, kop2); aid2 = client2.identifiers().get("member2").get(); System.out.println("Member2 rotated keys"); var icpResult3 = client3.identifiers().rotate("member3"); - op3 = icpResult3.op(); - op3 = waitOperation(client3, op3); + kop3 = icpResult3.op(); + waitForCompleted(client3, kop3); aid3 = client3.identifiers().get("member3").get(); System.out.println("Member3 rotated keys"); // Update new key states - op1 = client1.keyStates().query(aid2.getPrefix(), "1"); - op1 = waitOperation(client1, op1); - KeyStateRecord aid2State = switch (op1) { - case CompletedQueryOperation op -> op.getResponse(); - default -> throw new IllegalStateException("Unexpected operation state"); - }; - op1 = client1.keyStates().query(aid3.getPrefix(), "1"); - op1 = waitOperation(client1, op1); - KeyStateRecord aid3State = switch (op1) { - case CompletedQueryOperation op -> op.getResponse(); - default -> throw new IllegalStateException("Unexpected operation state"); - }; - - op2 = client2.keyStates().query(aid3.getPrefix(), "1"); - op2 = waitOperation(client2, op2); - op2 = client2.keyStates().query(aid1.getPrefix(), "1"); - op2 = waitOperation(client2, op2); - KeyStateRecord aid1State = switch (op2) { - case CompletedQueryOperation op -> op.getResponse(); - default -> throw new IllegalStateException("Unexpected operation state"); - }; - - op3 = client3.keyStates().query(aid1.getPrefix(), "1"); - op3 = waitOperation(client3, op3); - op3 = client3.keyStates().query(aid2.getPrefix(), "1"); - op3 = waitOperation(client3, op3); - - op4 = client4.keyStates().query(aid1.getPrefix(), "1"); - op4 = waitOperation(client4, op4); - op4 = client4.keyStates().query(aid2.getPrefix(), "1"); - op4 = waitOperation(client4, op4); - op4 = client4.keyStates().query(aid3.getPrefix(), "1"); - op4 = waitOperation(client4, op4); + QueryOperation qop1 = client1.keyStates().query(aid2.getPrefix(), "1"); + KeyStateRecord aid2State = waitForCompleted(client1, qop1, CompletedQueryOperation.class).getResponse(); + qop1 = client1.keyStates().query(aid3.getPrefix(), "1"); + KeyStateRecord aid3State = waitForCompleted(client1, qop1, CompletedQueryOperation.class).getResponse(); + + QueryOperation qop2 = client2.keyStates().query(aid3.getPrefix(), "1"); + waitForCompleted(client2, qop2); + qop2 = client2.keyStates().query(aid1.getPrefix(), "1"); + KeyStateRecord aid1State = waitForCompleted(client2, qop2, CompletedQueryOperation.class).getResponse(); + + QueryOperation qop3 = client3.keyStates().query(aid1.getPrefix(), "1"); + waitForCompleted(client3, qop3); + qop3 = client3.keyStates().query(aid2.getPrefix(), "1"); + waitForCompleted(client3, qop3); + + QueryOperation qop4 = client4.keyStates().query(aid1.getPrefix(), "1"); + waitForCompleted(client4, qop4); + qop4 = client4.keyStates().query(aid2.getPrefix(), "1"); + waitForCompleted(client4, qop4); + qop4 = client4.keyStates().query(aid3.getPrefix(), "1"); + waitForCompleted(client4, qop4); List rstateLst = List.of(aid1State, aid2State, aid3State); List stateLst = rstateLst; @@ -432,7 +423,7 @@ public void multisig() throws Exception { .rstates(rstateLst) .build(); - op1 = MultisigUtils.rotateMultisig( + kop1 = MultisigUtils.rotateMultisig( client1, "multisig", aid1, @@ -444,7 +435,7 @@ public void multisig() throws Exception { System.out.println("Member1 initiates rotation event, waiting for others to join..."); - op2 = MultisigUtils.rotateMultisig( + kop2 = MultisigUtils.rotateMultisig( client2, "multisig", aid2, @@ -455,7 +446,7 @@ public void multisig() throws Exception { ); System.out.println("Member2 joins rotation event, waiting for others..."); - op3 = MultisigUtils.rotateMultisig( + kop3 = MultisigUtils.rotateMultisig( client3, "multisig", aid3, @@ -467,14 +458,11 @@ public void multisig() throws Exception { System.out.println("Member3 joins rotation event, waiting for others..."); waitOperationAsync( - new WaitOperationArgs(client1, op1), - new WaitOperationArgs(client2, op2), - new WaitOperationArgs(client3, op3) + new WaitOperationArgs(client1, kop1), + new WaitOperationArgs(client2, kop2), + new WaitOperationArgs(client3, kop3) ); - HabState hab = client1.identifiers().get("multisig").get(); - String aid = hab.getPrefix(); - // Multisig Registry creation aid1 = client1.identifiers().get("member1").get(); aid2 = client2.identifiers().get("member2").get(); @@ -491,12 +479,12 @@ public void multisig() throws Exception { nonce, true ); - op1 = (Operation) registryMultisigList.get(0); + RegistryOperation rop1 = (RegistryOperation) registryMultisigList.get(0); String regk = registryMultisigList.get(1).toString(); System.out.println("Member1 initiated registry, waiting for others to join..."); // Member2 check for notifications and join the create registry event - op2 = MultisigUtils.createRegistryMultisig( + RegistryOperation rop2 = MultisigUtils.createRegistryMultisig( client2, aid2, List.of(aid1, aid3), @@ -508,7 +496,7 @@ public void multisig() throws Exception { System.out.println("Member2 joins registry event, waiting for others..."); // Member3 check for notifications and join the create registry event - op3 = MultisigUtils.createRegistryMultisig( + RegistryOperation rop3 = MultisigUtils.createRegistryMultisig( client3, aid3, List.of(aid1, aid2), @@ -520,9 +508,9 @@ public void multisig() throws Exception { ); waitOperationAsync( - new WaitOperationArgs(client1, op1), - new WaitOperationArgs(client2, op2), - new WaitOperationArgs(client3, op3) + new WaitOperationArgs(client1, rop1), + new WaitOperationArgs(client2, rop2), + new WaitOperationArgs(client3, rop3) ); System.out.println("Multisig create registry completed!"); @@ -546,7 +534,7 @@ public void multisig() throws Exception { .build(); IssueCredentialResult credRes = client1.credentials().issue("multisig", credentialData); - op1 = credRes.getOp(); + CredentialOperation cop1 = credRes.getOp(); multisigIssue(client1, "member1", "multisig", credRes); @@ -575,7 +563,7 @@ public void multisig() throws Exception { credentialData2.setA(credentialSubject); IssueCredentialResult credRes2 = client2.credentials().issue("multisig", credentialData2); - op2 = credRes2.getOp(); + CredentialOperation cop2 = credRes2.getOp(); multisigIssue(client2, "member2", "multisig", credRes2); System.out.println("Member2 joins credential create event, waiting for others..."); @@ -598,29 +586,29 @@ public void multisig() throws Exception { credentialData3.setA(credentialSubject); IssueCredentialResult credRes3 = client3.credentials().issue("multisig", credentialData3); - op3 = credRes3.getOp(); + CredentialOperation cop3 = credRes3.getOp(); multisigIssue(client3, "member3", "multisig", credRes3); System.out.println("Member3 joins credential create event, waiting for others..."); // Check completion waitOperationAsync( - new WaitOperationArgs(client1, op1), - new WaitOperationArgs(client2, op2), - new WaitOperationArgs(client3, op3) + new WaitOperationArgs(client1, cop1), + new WaitOperationArgs(client2, cop2), + new WaitOperationArgs(client3, cop3) ); System.out.println("Multisig create credential completed!"); HabState m = client1.identifiers().get("multisig").get(); // Update states - op1 = client1.keyStates().query(m.getPrefix(), "4"); - op1 = waitOperation(client1, op1); - op2 = client2.keyStates().query(m.getPrefix(), "4"); - op2 = waitOperation(client2, op2); - op3 = client3.keyStates().query(m.getPrefix(), "4"); - op3 = waitOperation(client3, op3); - op4 = client4.keyStates().query(m.getPrefix(), "4"); - op4 = waitOperation(client4, op4); + qop1 = client1.keyStates().query(m.getPrefix(), "4"); + waitForCompleted(client1, qop1); + qop2 = client2.keyStates().query(m.getPrefix(), "4"); + waitForCompleted(client2, qop2); + qop3 = client3.keyStates().query(m.getPrefix(), "4"); + waitForCompleted(client3, qop3); + qop4 = client4.keyStates().query(m.getPrefix(), "4"); + waitForCompleted(client4, qop4); // IPEX grant message System.out.println("Starting grant message"); @@ -639,7 +627,7 @@ public void multisig() throws Exception { List gsigs = grantResult.sigs(); String end = grantResult.atc(); - op1 = client1.ipex().submitGrant("multisig", grant, gsigs, end, List.of(holder)); + ExchangeOperation exop1 = client1.ipex().submitGrant("multisig", grant, gsigs, end, List.of(holder)); Map mstate = Utils.toMap(m.getState()); List seal = Arrays.asList( @@ -694,7 +682,7 @@ public void multisig() throws Exception { List gsigs2 = grantResult2.sigs(); String end2 = grantResult2.atc(); - op2 = client2.ipex().submitGrant("multisig", grant2, gsigs2, end2, List.of(holder)); + ExchangeOperation exop2 = client2.ipex().submitGrant("multisig", grant2, gsigs2, end2, List.of(holder)); sigers = gsigs2.stream() .map(Siger::new) @@ -741,7 +729,7 @@ public void multisig() throws Exception { List gsigs3 = grantResult3.sigs(); String end3 = grantResult3.atc(); - op3 = client3.ipex().submitGrant("multisig", grant3, gsigs3, end3, List.of(holder)); + ExchangeOperation exop3 = client3.ipex().submitGrant("multisig", grant3, gsigs3, end3, List.of(holder)); sigers = gsigs3.stream() .map(Siger::new) @@ -784,13 +772,13 @@ public void multisig() throws Exception { List asigs = admitResult.sigs(); String aend = admitResult.atc(); - op4 = client4.ipex().submitAdmit("holder", admit, asigs, aend, List.of(m.getPrefix())); + ExchangeOperation exop4 = client4.ipex().submitAdmit("holder", admit, asigs, aend, List.of(m.getPrefix())); waitOperationAsync( - new WaitOperationArgs(client1, op1), - new WaitOperationArgs(client2, op2), - new WaitOperationArgs(client3, op3), - new WaitOperationArgs(client4, op4) + new WaitOperationArgs(client1, exop1), + new WaitOperationArgs(client2, exop2), + new WaitOperationArgs(client3, exop3), + new WaitOperationArgs(client4, exop4) ); System.out.println("Holder creates and sends admit message"); @@ -805,7 +793,7 @@ public void multisig() throws Exception { System.out.println("Revoking credential..."); String REVTIME = new Date().toInstant().toString().replace("Z", "000+00:00"); RevokeCredentialResult revokeRes = client1.credentials().revoke("multisig", credentialSaid, REVTIME); - op1 = revokeRes.getOp(); + cop1 = revokeRes.getOp(); multisigRevoke(client1, "member1", "multisig", revokeRes.getRev(), revokeRes.getAnc()); System.out.println("Member1 initiated credential revocation, waiting for others to join..."); @@ -817,7 +805,7 @@ public void multisig() throws Exception { assertEquals(msgSaid, res.getFirst().getExn().getD()); RevokeCredentialResult revokeRes2 = client2.credentials().revoke("multisig", credentialSaid, REVTIME); - op2 = revokeRes2.getOp(); + cop2 = revokeRes2.getOp(); multisigRevoke(client2, "member2", "multisig", revokeRes2.getRev(), revokeRes2.getAnc()); System.out.println("Member2 joins credential revoke event, waiting for others..."); @@ -828,15 +816,15 @@ public void multisig() throws Exception { assertEquals(msgSaid, res.getFirst().getExn().getD()); RevokeCredentialResult revokeRes3 = client3.credentials().revoke("multisig", credentialSaid, REVTIME); - op3 = revokeRes3.getOp(); + cop3 = revokeRes3.getOp(); multisigRevoke(client3, "member3", "multisig", revokeRes3.getRev(), revokeRes3.getAnc()); System.out.println("Member3 joins credential revoke event, waiting for others..."); // Check completion waitOperationAsync( - new WaitOperationArgs(client1, op1), - new WaitOperationArgs(client2, op2), - new WaitOperationArgs(client3, op3) + new WaitOperationArgs(client1, cop1), + new WaitOperationArgs(client2, cop2), + new WaitOperationArgs(client3, cop3) ); System.out.println("Multisig credential revocation completed!"); } diff --git a/src/test/java/org/cardanofoundation/signify/e2e/RandyTest.java b/src/test/java/org/cardanofoundation/signify/e2e/RandyTest.java index f2c6a3b8..0763bd12 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/RandyTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/RandyTest.java @@ -44,7 +44,7 @@ void randyTest() throws Exception { CreateIdentifierArgs kargs = new CreateIdentifierArgs(); kargs.setAlgo(Manager.Algos.randy); var icpResult = client1.identifiers().create("aid1", kargs); - waitOperation(client1, icpResult.op()); + waitForCompleted(client1, icpResult.op()); Serder icp = icpResult.serder(); assertEquals(1, icp.getVerfers().size()); @@ -64,7 +64,7 @@ void randyTest() throws Exception { assertEquals(icp.getPre(), opResponsePrefix); var ixnResult = client1.identifiers().interact("aid1", icp.getPre()); - waitOperation(client1, ixnResult.op()); + waitForCompleted(client1, ixnResult.op()); Serder ixn = ixnResult.serder(); assertEquals("1", ixn.getKed().get("s")); assertEquals(List.of(icp.getPre()), ixn.getKed().get("a")); @@ -82,7 +82,7 @@ void randyTest() throws Exception { assertEquals(2, logList.size()); var rotResult = client1.identifiers().rotate("aid1"); - waitOperation(client1, rotResult.op()); + waitForCompleted(client1, rotResult.op()); Serder rot = rotResult.serder(); assertEquals("2", rot.getKed().get("s")); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/SaltyTests.java b/src/test/java/org/cardanofoundation/signify/e2e/SaltyTests.java index 31410143..d8370591 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/SaltyTests.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/SaltyTests.java @@ -42,7 +42,7 @@ void saltyTest() throws Exception { CreateIdentifierArgs bran = new CreateIdentifierArgs(); bran.setBran("0123456789abcdefghijk"); var icpResult = client.identifiers().create("aid1", bran); - waitOperation(client, icpResult.op()); + waitForCompleted(client, icpResult.op()); Serder icp = icpResult.serder(); @@ -76,7 +76,7 @@ void saltyTest() throws Exception { params.setBran("0123456789lmnopqrstuv"); var icpResult1 = client.identifiers().create("aid2", params); - waitOperation(client, icpResult1.op()); + waitForCompleted(client, icpResult1.op()); Serder icp2 = icpResult1.serder(); assertEquals("EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX", icp2.getPre()); @@ -107,7 +107,7 @@ void saltyTest() throws Exception { CreateIdentifierArgs kargs = new CreateIdentifierArgs(); kargs.setAlgo(Manager.Algos.salty); var icpResult2 = client.identifiers().create("aid3", kargs); - waitOperation(client, icpResult2.op()); + waitForCompleted(client, icpResult2.op()); IdentifierListResponse aidsJson2 = client.identifiers().list(0, 24); List aids2 = aidsJson2.aids(); @@ -132,7 +132,7 @@ void saltyTest() throws Exception { // Rotate var icpResultRotate = client.identifiers().rotate("aid1"); - waitOperation(client, icpResultRotate.op()); + waitForCompleted(client, icpResultRotate.op()); Serder rotRotate = icpResultRotate.serder(); Assertions.assertEquals("EBQABdRgaxJONrSLcgrdtbASflkvLxJkiDO0H-XmuhGg", rotRotate.getKed().get("d")); @@ -144,7 +144,7 @@ void saltyTest() throws Exception { // Interact var icpResultInteract = client.identifiers().interact("aid1", List.of(icp.getPre())); - waitOperation(client, icpResultInteract.op()); + waitForCompleted(client, icpResultInteract.op()); Serder ixn = icpResultInteract.serder(); Assertions.assertEquals("ENsmRAg_oM7Hl1S-GTRMA7s4y760lQMjzl0aqOQ2iTce", ixn.getKed().get("d")); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDIPTest.java b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDIPTest.java index 6ed40121..015c2264 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDIPTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDIPTest.java @@ -6,10 +6,11 @@ import org.cardanofoundation.signify.e2e.utils.ResolveEnv; import org.cardanofoundation.signify.e2e.utils.TestUtils; import org.cardanofoundation.signify.generated.keria.model.CompletedDelegationOperation; +import org.cardanofoundation.signify.generated.keria.model.DelegationOperation; import org.cardanofoundation.signify.generated.keria.model.HabState; +import org.cardanofoundation.signify.generated.keria.model.KelOperation; import org.cardanofoundation.signify.generated.keria.model.Operation; import org.cardanofoundation.signify.generated.keria.model.QueryOperation; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.*; import java.io.IOException; @@ -21,7 +22,6 @@ class SinglesigDIPTest extends BaseIntegrationTest { private static SignifyClient client1, client2; - private static String contact1_id; private static String name1_id, name1_oobi; @BeforeAll @@ -40,7 +40,7 @@ public void getIdentifier() throws Exception { @BeforeEach public void getContact() throws IOException, InterruptedException, LibsodiumException { - contact1_id = TestUtils.getOrCreateContact(client2, "contact1", name1_oobi); + TestUtils.getOrCreateContact(client2, "contact1", name1_oobi); } @Test @@ -50,7 +50,7 @@ public void singlesig_dip() throws Exception { CreateIdentifierArgs kargs = new CreateIdentifierArgs(); kargs.setDelpre(name1_id); var result = client2.identifiers().create("delegate1", kargs); - Operation op = result.op(); + KelOperation op = result.op(); HabState delegate1 = client2.identifiers().get("delegate1").get(); opResponseName = op.getName(); Assertions.assertEquals(opResponseName, "delegation." + delegate1.getPrefix()); @@ -62,7 +62,7 @@ public void singlesig_dip() throws Exception { seal.put("d", delegate1.getPrefix()); var interactResult1 = client1.identifiers().interact("name1", seal); - Operation op1 = interactResult1.op(); + KelOperation op1 = interactResult1.op(); // Refresh keystate to sn=1 QueryOperation op2 = client2.keyStates().query(name1_id, "1", null); @@ -72,7 +72,7 @@ public void singlesig_dip() throws Exception { new WaitOperationArgs(client1, op1), new WaitOperationArgs(client2, op2) ); - op = opList.getFirst(); + op = (DelegationOperation) opList.getFirst(); opResponseI = ((CompletedDelegationOperation) op).getResponse().getI(); @@ -108,7 +108,7 @@ public void singlesig_dip() throws Exception { new WaitOperationArgs(client1, op1), new WaitOperationArgs(client2, op2) ); - op = opList.getFirst(); + op = (DelegationOperation) opList.getFirst(); opResponseI = ((CompletedDelegationOperation) op).getResponse().getI(); @@ -118,6 +118,6 @@ public void singlesig_dip() throws Exception { // Make sure query with seal is idempotent QueryOperation queryOp = client2.keyStates().query(name1_id, null, seal); - waitOperation(client2, queryOp); + waitForCompleted(client2, queryOp); } } diff --git a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDRTTest.java b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDRTTest.java index eec2636b..eb9f2a0d 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDRTTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigDRTTest.java @@ -7,7 +7,9 @@ import org.cardanofoundation.signify.e2e.utils.TestUtils; import org.cardanofoundation.signify.generated.keria.model.CompletedDelegationOperation; import org.cardanofoundation.signify.generated.keria.model.CompletedDelegationOperationResponse; +import org.cardanofoundation.signify.generated.keria.model.DelegationOperation; import org.cardanofoundation.signify.generated.keria.model.HabState; +import org.cardanofoundation.signify.generated.keria.model.KelOperation; import org.cardanofoundation.signify.generated.keria.model.Operation; import org.cardanofoundation.signify.generated.keria.model.QueryOperation; import org.junit.jupiter.api.Assertions; @@ -25,7 +27,6 @@ public class SinglesigDRTTest extends BaseIntegrationTest { private static SignifyClient delegator, delegate; private static String name1_id, name1_oobi; - private static String contact1_id; private String opResponseName, opResponseT, opResponseS; @BeforeAll @@ -44,7 +45,7 @@ public void getIdentifier() throws Exception { @BeforeEach public void getContact() throws IOException, InterruptedException, LibsodiumException { - contact1_id = TestUtils.getOrCreateContact(delegate, "contact1", name1_oobi); + TestUtils.getOrCreateContact(delegate, "contact1", name1_oobi); } @Test @@ -54,7 +55,7 @@ public void singlesig_drt() throws Exception { kargs.setDelpre(name1_id); var result = delegate.identifiers().create("delegate1", kargs); - Operation op = result.op(); + KelOperation op = result.op(); HabState delegate1 = delegate.identifiers().get("delegate1").get(); opResponseName = op.getName(); @@ -67,7 +68,7 @@ public void singlesig_drt() throws Exception { seal.put("d", delegate1.getPrefix()); var interactResult1 = delegator.identifiers().interact("name1", seal); - Operation op1 = interactResult1.op(); + KelOperation op1 = interactResult1.op(); QueryOperation op2 = delegate.keyStates().query(name1_id, "1", null); waitOperationAsync( @@ -100,8 +101,8 @@ public void singlesig_drt() throws Exception { new WaitOperationArgs(delegate, op2) ); - op = operationList.getFirst(); - CompletedDelegationOperationResponse opResponse = ((CompletedDelegationOperation) op).getResponse(); + DelegationOperation dop = (DelegationOperation) operationList.getFirst(); + CompletedDelegationOperationResponse opResponse = ((CompletedDelegationOperation) dop).getResponse(); opResponseT = opResponse.getT(); opResponseS = opResponse.getS(); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigIXNTest.java b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigIXNTest.java index 1e0d1c4c..d9a68bc5 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigIXNTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigIXNTest.java @@ -5,7 +5,6 @@ import org.cardanofoundation.signify.e2e.utils.TestUtils; import org.cardanofoundation.signify.generated.keria.model.CompletedQueryOperation; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; -import org.cardanofoundation.signify.generated.keria.model.Operation; import org.cardanofoundation.signify.generated.keria.model.QueryOperation; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -66,7 +65,7 @@ public void singlesig_ixn_ixn1() throws Exception { // ixn var result = client1.identifiers().interact("name1", null); - waitOperation(client1, result.op()); + waitForCompleted(client1, result.op()); // local keystate after rot KeyStateRecord keyStateRecord1 = client1.keyStates().get(name1_id).get(); @@ -88,9 +87,9 @@ public void singlesig_ixn_ixn1() throws Exception { // refresh remote keystate String sn = keyStateRecord1.getS(); QueryOperation op = client2.keyStates().query(contact1_id, sn, null); - Operation completedOp = waitOperation(client2, op); + CompletedQueryOperation completedOp = waitForCompleted(client2, op, CompletedQueryOperation.class); - KeyStateRecord keyState3 = ((CompletedQueryOperation) completedOp).getResponse(); + KeyStateRecord keyState3 = completedOp.getResponse(); // local and remote keystate match assertEquals(keyState3.getS(), diff --git a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigROTTest.java b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigROTTest.java index 559be238..ca02b067 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigROTTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigROTTest.java @@ -5,7 +5,6 @@ import org.cardanofoundation.signify.cesr.exceptions.LibsodiumException; import org.cardanofoundation.signify.generated.keria.model.CompletedQueryOperation; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; -import org.cardanofoundation.signify.generated.keria.model.Operation; import org.cardanofoundation.signify.generated.keria.model.QueryOperation; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -76,7 +75,7 @@ public void singlesig_rot_rot1() throws Exception { // rot RotateIdentifierArgs args = RotateIdentifierArgs.builder().build(); var result = client1.identifiers().rotate("name1", args); - waitOperation(client1, result.op()); + waitForCompleted(client1, result.op()); // local keystate after rot KeyStateRecord keyStateRecord1 = client1.keyStates().get(name1_id).get(); @@ -101,8 +100,8 @@ public void singlesig_rot_rot1() throws Exception { // refresh remote keystate String sn = keyStateRecord1.getS(); QueryOperation queryOp = client2.keyStates().query(contact1_id, sn, null); - Operation completedOp = waitOperation(client2, queryOp); - KeyStateRecord keyState3 = ((CompletedQueryOperation) completedOp).getResponse(); + CompletedQueryOperation completedOp = waitForCompleted(client2, queryOp, CompletedQueryOperation.class); + KeyStateRecord keyState3 = completedOp.getResponse(); // local and remote keystate match assertEquals(keyState3.getS(), keyStateRecord1.getS()); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigVleiIssuanceTest.java b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigVleiIssuanceTest.java index 10512052..d7e098d4 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/SinglesigVleiIssuanceTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/SinglesigVleiIssuanceTest.java @@ -550,7 +550,7 @@ public IssuerRegistry getOrCreateRegistry(SignifyClient client, Aid aid, String registryArgs.setRegistryName(registryName); RegistryResult regResult = client.registries().create(registryArgs); - waitOperation(client, regResult.op()); + waitForCompleted(client, regResult.op()); registriesList = client.registries().list(aid.name); Registry registryBody = registriesList.get(0); @@ -578,7 +578,7 @@ public void sendGrantMessage(SignifyClient senderClient, Aid senderAid, Aid reci result.atc(), Collections.singletonList(recipientAid.prefix) ); - waitOperation(senderClient, op); + waitForCompleted(senderClient, op); } public void sendAdmitMessage(SignifyClient senderClient, Aid senderAid, Aid recipientAid) throws Exception { @@ -603,7 +603,7 @@ public void sendAdmitMessage(SignifyClient senderClient, Aid senderAid, Aid reci result.atc(), Collections.singletonList(recipientAid.prefix) ); - waitOperation(senderClient, op); + waitForCompleted(senderClient, op); markAndRemoveNotification(senderClient, grantNotification); } diff --git a/src/test/java/org/cardanofoundation/signify/e2e/WitnessTest.java b/src/test/java/org/cardanofoundation/signify/e2e/WitnessTest.java index f30bda13..5cd72ae3 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/WitnessTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/WitnessTest.java @@ -13,7 +13,7 @@ import java.util.Collections; import static org.cardanofoundation.signify.e2e.utils.TestUtils.resolveOobi; -import static org.cardanofoundation.signify.e2e.utils.TestUtils.waitOperation; +import static org.cardanofoundation.signify.e2e.utils.TestUtils.waitForCompleted; import static org.junit.jupiter.api.Assertions.assertEquals; public class WitnessTest { @@ -52,14 +52,14 @@ public void testWitness() throws Exception { kargs.setWits(Collections.singletonList(WITNESS_AID)); var icpResult1 = client1.identifiers().create("aid1", kargs); - waitOperation(client1, icpResult1.op()); + waitForCompleted(client1, icpResult1.op()); HabState aid1 = client1.identifiers().get("aid1").get(); System.out.println("AID1: " + aid1.getPrefix()); assertEquals(1, aid1.getState().getB().size()); assertEquals(WITNESS_AID, aid1.getState().getB().getFirst()); var rotResult1 = client1.identifiers().rotate("aid1"); - waitOperation(client1, rotResult1.op()); + waitForCompleted(client1, rotResult1.op()); aid1 = client1.identifiers().get("aid1").get(); assertEquals(1, aid1.getState().getB().size()); assertEquals(WITNESS_AID, aid1.getState().getB().getFirst()); @@ -69,7 +69,7 @@ public void testWitness() throws Exception { args.setCuts(Collections.singletonList(WITNESS_AID)); var rotResult2 = client1.identifiers().rotate("aid1", args); - waitOperation(client1, rotResult2.op()); + waitForCompleted(client1, rotResult2.op()); aid1 = client1.identifiers().get("aid1").get(); assertEquals(0, aid1.getState().getB().size()); @@ -77,7 +77,7 @@ public void testWitness() throws Exception { args.setCuts(null); args.setAdds(Collections.singletonList(WITNESS_AID)); var rotResult3 = client1.identifiers().rotate("aid1", args); - waitOperation(client1, rotResult3.op()); + waitForCompleted(client1, rotResult3.op()); aid1 = client1.identifiers().get("aid1").get(); assertEquals(1, aid1.getState().getB().size()); assertEquals(WITNESS_AID, aid1.getState().getB().getFirst()); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java b/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java index 26fc8fb1..f57cd8fa 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java @@ -31,17 +31,21 @@ import org.cardanofoundation.signify.generated.keria.model.AidRecord; import org.cardanofoundation.signify.generated.keria.model.Credential; import org.cardanofoundation.signify.generated.keria.model.CredentialOperation; +import org.cardanofoundation.signify.generated.keria.model.DelegatorOperation; import org.cardanofoundation.signify.generated.keria.model.Exn; import org.cardanofoundation.signify.generated.keria.model.ExnMultisig; import org.cardanofoundation.signify.generated.keria.model.GroupMember; +import org.cardanofoundation.signify.generated.keria.model.GroupOperation; import org.cardanofoundation.signify.generated.keria.model.HabState; +import org.cardanofoundation.signify.generated.keria.model.KelOperation; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; import org.cardanofoundation.signify.generated.keria.model.Operation; +import org.cardanofoundation.signify.generated.keria.model.RegistryOperation; @SuppressWarnings("unchecked") public class MultisigUtils { - public static Operation acceptMultisigIncept(SignifyClient client2, AcceptMultisigInceptArgs args) throws IOException, InterruptedException, DigestException, LibsodiumException, ExecutionException { + public static KelOperation acceptMultisigIncept(SignifyClient client2, AcceptMultisigInceptArgs args) throws IOException, InterruptedException, DigestException, LibsodiumException, ExecutionException { final HabState memberHab = client2.identifiers().get(args.getLocalMemberName()) .orElseThrow(() -> new IllegalArgumentException("Identifier not found: " + args.getLocalMemberName())); @@ -73,7 +77,7 @@ public static Operation acceptMultisigIncept(SignifyClient client2, AcceptMultis createIdentifierArgs.setDelpre(icp.get("di") != null ? icp.get("di").toString() : null); var icpResult2 = client2.identifiers().create(args.getGroupName(), createIdentifierArgs); - Operation op2 = icpResult2.op(); + KelOperation op2 = icpResult2.op(); Serder serder = icpResult2.serder(); List sigs = icpResult2.sigs(); List sigers = sigs.stream().map(Siger::new).toList(); @@ -97,7 +101,7 @@ public static Operation acceptMultisigIncept(SignifyClient client2, AcceptMultis return op2; } - public static Operation interactMultisig(SignifyClient client, String groupName, HabState aid, + public static KelOperation interactMultisig(SignifyClient client, String groupName, HabState aid, List otherMemberAIDs, Object data, List states, @@ -142,7 +146,7 @@ public static Operation interactMultisig(SignifyClient client, String groupName, return interactResult.op(); } - public static Operation rotateMultisig(SignifyClient client, String groupName, HabState aid, + public static KelOperation rotateMultisig(SignifyClient client, String groupName, HabState aid, List otherMemberAIDs, RotateIdentifierArgs kargs, String route, @@ -361,7 +365,7 @@ public static void admitMultisig( ); } - public static Operation createAIDMultisig( + public static GroupOperation createAIDMultisig( SignifyClient client, HabState aid, List otherMembersAIDs, @@ -374,7 +378,7 @@ public static Operation createAIDMultisig( } var icpResult = client.identifiers().create(groupName, kargs); - Operation op = icpResult.op(); + GroupOperation op = (GroupOperation) icpResult.op(); Serder serder = icpResult.serder(); List sigs = icpResult.sigs(); @@ -413,7 +417,7 @@ public static Operation createAIDMultisig( return op; } - public static Operation createRegistryMultisig( + public static RegistryOperation createRegistryMultisig( SignifyClient client, HabState aid, List otherMembersAIDs, @@ -434,7 +438,7 @@ public static Operation createRegistryMultisig( .nonce(nonce) .build(); RegistryResult vcpResult = client.registries().create(createRegistryArgs); - Operation op = vcpResult.op(); + RegistryOperation op = (RegistryOperation) vcpResult.op(); Serder serder = vcpResult.getRegser(); Serder anc = vcpResult.getSerder(); @@ -466,7 +470,7 @@ public static Operation createRegistryMultisig( return op; } - public static Operation createRegistryMultisig( + public static RegistryOperation createRegistryMultisig( SignifyClient client, HabState aid, List otherMembersAIDs, @@ -531,7 +535,7 @@ public static Operation createMultisig( - public static Operation delegateMultisig( + public static DelegatorOperation delegateMultisig( SignifyClient client, HabState aid, List otherMembersAIDs, @@ -549,7 +553,7 @@ public static Operation delegateMultisig( } var delResult = client.delegations().approve(multisigAID.getName(), anchor); - Operation appOp = delResult.op(); + DelegatorOperation appOp = delResult.op(); System.out.println("Delegator " + aid.getName() + "(" + aid.getPrefix() + ") approved delegation for " + multisigAID.getName() + " with anchor " + anchor); @@ -703,7 +707,7 @@ public static CredentialOperation issueCredentialMultisig( return op; } - public static Operation startMultisigIncept( + public static KelOperation startMultisigIncept( SignifyClient client, StartMultisigInceptArgs args ) throws IOException, InterruptedException, DigestException, LibsodiumException, ExecutionException { @@ -728,7 +732,7 @@ public static Operation startMultisigIncept( createIdentifierArgs.setRstates(participantStates); var icpResult1 = client.identifiers().create(args.getGroupName(), createIdentifierArgs); - Operation op1 = icpResult1.op(); + KelOperation op1 = icpResult1.op(); Serder serder = icpResult1.serder(); List sigs = icpResult1.sigs(); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java b/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java index a941f267..45df1439 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/utils/TestUtils.java @@ -155,18 +155,18 @@ public static HabState getOrCreateAID(SignifyClient client, String name, CreateI return existingAID.get(); } else { var result = client.identifiers().create(name, kargs); - waitOperation(client, result.op()); + waitForCompleted(client, result.op()); HabState aid = client.identifiers().get(name) .orElseThrow(() -> new IllegalArgumentException("Failed to create identifier: " + name)); - + if (client.getAgent() == null || client.getAgent().getPre() == null) { throw new IllegalArgumentException("Client, agent, or pre cannot be null"); } String pre = client.getAgent().getPre(); var op = client.identifiers().addEndRole(name, "agent", pre, null); - waitOperation(client, op.op()); + waitForCompleted(client, op.op()); System.out.println(name + "AID:" + aid.getPrefix()); return aid; @@ -246,7 +246,7 @@ public static String[] getOrCreateIdentifier(SignifyClient client, String name, kargs.setWits(env.witnessIds()); } var result = client.identifiers().create(name, kargs); - KelOperation opResult = waitOperation(client, result.op(), KelOperation.class); + Operation opResult = waitForCompleted(client, result.op()); id = switch (opResult) { case CompletedWitnessOperation completed -> completed.getResponse().getI(); case CompletedDelegationOperation completed -> completed.getResponse().getI(); @@ -260,7 +260,7 @@ public static String[] getOrCreateIdentifier(SignifyClient client, String name, } if (!hasEndRole(client, name, "agent", eid)) { var results = client.identifiers().addEndRole(name, "agent", eid, null); - waitOperation(client, results.op()); + waitForCompleted(client, results.op()); } } @@ -282,12 +282,10 @@ public static String getOrCreateContact(SignifyClient client, String name, Strin } OOBIOperation op = client.oobis().resolve(oobi, name); - OOBIOperation opBody = waitOperation(client, op, OOBIOperation.class); - if (opBody instanceof CompletedOOBIOperation completed) { - String i = completed.getResponse().getI(); - if (i != null) { - return i; - } + CompletedOOBIOperation opBody = waitForCompleted(client, op, CompletedOOBIOperation.class); + String i = opBody.getResponse().getI(); + if (i != null) { + return i; } return getOrCreateContact(client, name, oobi); } @@ -347,7 +345,7 @@ public static Credential getOrIssueCredential( cData.setE(source); IssueCredentialResult issResult = issuerClient.credentials().issue(issuerAid.name, cData); - waitOperation(issuerClient, issResult.getOp()); + waitForCompleted(issuerClient, issResult.getOp()); return issuerClient.credentials().get(issResult.getAcdc().getKed().get("d").toString()).get(); } @@ -437,7 +435,7 @@ public static void markNotification(SignifyClient client, Notification note) thr public static void resolveOobi(SignifyClient client, String oobi, String alias) throws IOException, InterruptedException, LibsodiumException { OOBIOperation op = client.oobis().resolve(oobi, alias); - waitOperation(client, op); + waitForCompleted(client, op); } public static Credential waitForCredential(SignifyClient client, String credSAID) throws Exception { @@ -527,6 +525,42 @@ public static T waitOperation( return result; } + public static Operation waitForCompleted(SignifyClient client, Operation op) + throws IOException, InterruptedException, LibsodiumException { + Operation result = waitOperation(client, op, Operation.class); + String failureMessage = switch (result) { + case FailedChallengeOperation f -> f.getError().getMessage(); + case FailedCredentialOperation f -> f.getError().getMessage(); + case FailedDelegationOperation f -> f.getError().getMessage(); + case FailedDelegatorOperation f -> f.getError().getMessage(); + case FailedDoneOperation f -> f.getError().getMessage(); + case FailedEndRoleOperation f -> f.getError().getMessage(); + case FailedExchangeOperation f -> f.getError().getMessage(); + case FailedGroupOperation f -> f.getError().getMessage(); + case FailedLocSchemeOperation f -> f.getError().getMessage(); + case FailedOOBIOperation f -> f.getError().getMessage(); + case FailedQueryOperation f -> f.getError().getMessage(); + case FailedRegistryOperation f -> f.getError().getMessage(); + case FailedSubmitOperation f -> f.getError().getMessage(); + case FailedWitnessOperation f -> f.getError().getMessage(); + default -> null; + }; + if (failureMessage != null) { + throw new AssertionError("Operation failed: " + failureMessage); + } + return result; + } + + @SuppressWarnings("unchecked") + public static T waitForCompleted(SignifyClient client, Operation op, Class expectedType) + throws IOException, InterruptedException, LibsodiumException { + Operation result = waitForCompleted(client, op); + if (!expectedType.isInstance(result)) { + throw new AssertionError("Expected " + expectedType.getSimpleName() + " but got " + result.getClass().getSimpleName()); + } + return (T) result; + } + public static Integer parseInteger(String s) { try { return Integer.parseInt(s); From 13fa0fc7ee67930619dd512adfa8eee87f60d113 Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Fri, 8 May 2026 14:59:23 +0700 Subject: [PATCH 18/20] resolve review comments: RegistryResult is inconsistent with EventResult --- .../credentialing/registries/Registries.java | 4 +++- .../registries/RegistryResult.java | 24 +++---------------- .../signify/app/RegistryTest.java | 7 +++--- .../signify/e2e/MultisigTest.java | 6 ++--- .../signify/e2e/utils/MultisigUtils.java | 12 +++++----- 5 files changed, 19 insertions(+), 34 deletions(-) diff --git a/src/main/java/org/cardanofoundation/signify/app/credentialing/registries/Registries.java b/src/main/java/org/cardanofoundation/signify/app/credentialing/registries/Registries.java index fdd72484..d5738b7c 100644 --- a/src/main/java/org/cardanofoundation/signify/app/credentialing/registries/Registries.java +++ b/src/main/java/org/cardanofoundation/signify/app/credentialing/registries/Registries.java @@ -19,6 +19,7 @@ import java.util.*; import org.cardanofoundation.signify.generated.keria.model.HabState; import org.cardanofoundation.signify.generated.keria.model.Registry; +import org.cardanofoundation.signify.generated.keria.model.RegistryOperation; import com.fasterxml.jackson.core.type.TypeReference; import static org.cardanofoundation.signify.cesr.util.CoreUtil.Versionage; @@ -104,7 +105,8 @@ public RegistryResult create(CreateRegistryArgs args) throws IOException, Interr List sigs = keeper.sign(serder.getRaw().getBytes()).signatures(); HttpResponse res = this.createFromEvents(hab, args.getName(), args.getRegistryName(), regser.getKed(), serder.getKed(), sigs); - return new RegistryResult(regser, serder, sigs, res); + RegistryOperation op = Utils.fromJson(res.body(), RegistryOperation.class); + return new RegistryResult(regser, serder, sigs, op); } } diff --git a/src/main/java/org/cardanofoundation/signify/app/credentialing/registries/RegistryResult.java b/src/main/java/org/cardanofoundation/signify/app/credentialing/registries/RegistryResult.java index 49fa282f..fe66b46c 100644 --- a/src/main/java/org/cardanofoundation/signify/app/credentialing/registries/RegistryResult.java +++ b/src/main/java/org/cardanofoundation/signify/app/credentialing/registries/RegistryResult.java @@ -1,30 +1,12 @@ package org.cardanofoundation.signify.app.credentialing.registries; -import lombok.Getter; -import lombok.Setter; import org.cardanofoundation.signify.cesr.Serder; -import org.cardanofoundation.signify.cesr.util.Utils; import org.cardanofoundation.signify.generated.keria.model.RegistryOperation; -import java.net.http.HttpResponse; import java.util.List; -@Getter -@Setter -public class RegistryResult { - private final Serder regser; - private final Serder serder; - private final List sigs; - private final HttpResponse response; - - public RegistryResult(Serder regser, Serder serder, List sigs, HttpResponse response) { - this.regser = regser; - this.serder = serder; - this.sigs = sigs; - this.response = response; - } - +public record RegistryResult(Serder regser, Serder serder, List sigs, RegistryOperation opInstance) { public RegistryOperation op() { - return Utils.fromJson(response.body(), RegistryOperation.class); + return opInstance; } -} \ No newline at end of file +} diff --git a/src/test/java/org/cardanofoundation/signify/app/RegistryTest.java b/src/test/java/org/cardanofoundation/signify/app/RegistryTest.java index c6eeca14..b3f23995 100644 --- a/src/test/java/org/cardanofoundation/signify/app/RegistryTest.java +++ b/src/test/java/org/cardanofoundation/signify/app/RegistryTest.java @@ -63,8 +63,9 @@ void shouldCreateRegistry() throws Exception { when(mockedKeeper.getParams()).thenReturn(SaltyParams.builder().build()); HttpResponse mockedResponse = mock(HttpResponse.class); - when(mockedClient.fetch(eq("/identifiers/a name/registries"), eq("POST"), any(), any())) + when(mockedClient.fetch(eq("/identifiers/a name/registries"), eq("POST"), any())) .thenReturn(mockedResponse); + when(mockedResponse.body()).thenReturn("{\"name\":\"registry.test\",\"done\":false}"); CreateRegistryArgs args = CreateRegistryArgs.builder() .name("a name") @@ -73,8 +74,8 @@ void shouldCreateRegistry() throws Exception { .build(); var actual = registries.create(args); - assertEquals("{\"v\":\"KERI10JSON0000c5_\",\"t\":\"vcp\",\"d\":\"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX\",\"i\":\"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX\",\"ii\":\"hab prefix\",\"s\":\"0\",\"c\":[\"NB\"],\"bt\":\"0\",\"b\":[],\"n\":\"\"}", actual.getRegser().getRaw()); - assertEquals("{\"v\":\"KERI10JSON0000f4_\",\"t\":\"ixn\",\"d\":\"EE5R61289Xnpxc2M-euPtsAkp849tUdNJ7DuyBeSiRtm\",\"i\":\"hab prefix\",\"s\":\"1\",\"p\":\"a digest\",\"a\":[{\"i\":\"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX\",\"s\":\"0\",\"d\":\"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX\"}]}", actual.getSerder().getRaw()); + assertEquals("{\"v\":\"KERI10JSON0000c5_\",\"t\":\"vcp\",\"d\":\"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX\",\"i\":\"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX\",\"ii\":\"hab prefix\",\"s\":\"0\",\"c\":[\"NB\"],\"bt\":\"0\",\"b\":[],\"n\":\"\"}", actual.regser().getRaw()); + assertEquals("{\"v\":\"KERI10JSON0000f4_\",\"t\":\"ixn\",\"d\":\"EE5R61289Xnpxc2M-euPtsAkp849tUdNJ7DuyBeSiRtm\",\"i\":\"hab prefix\",\"s\":\"1\",\"p\":\"a digest\",\"a\":[{\"i\":\"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX\",\"s\":\"0\",\"d\":\"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX\"}]}", actual.serder().getRaw()); } @Test diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java index 6e56fbf0..29ffaabd 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java @@ -936,10 +936,10 @@ public static List createRegistryMultisig( RegistryResult vcpResult = client.registries().create(createRegistryArgs); RegistryOperation op = vcpResult.op(); - Serder serder = vcpResult.getRegser(); + Serder serder = vcpResult.regser(); String regk = serder.getPre(); - Serder anc = vcpResult.getSerder(); - List sigs = vcpResult.getSigs(); + Serder anc = vcpResult.serder(); + List sigs = vcpResult.sigs(); List sigers = sigs.stream().map(Siger::new).toList(); String ims = new String(Eventing.messagize(anc, sigers, null, null, null, false)); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java b/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java index f57cd8fa..7f7107e3 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java @@ -440,9 +440,9 @@ public static RegistryOperation createRegistryMultisig( RegistryResult vcpResult = client.registries().create(createRegistryArgs); RegistryOperation op = (RegistryOperation) vcpResult.op(); - Serder serder = vcpResult.getRegser(); - Serder anc = vcpResult.getSerder(); - List sigs = vcpResult.getSigs(); + Serder serder = vcpResult.regser(); + Serder anc = vcpResult.serder(); + List sigs = vcpResult.sigs(); List sigers = sigs.stream().map(Siger::new).toList(); String ims = new String(Eventing.messagize(anc, sigers, null, null, null, false)); @@ -504,9 +504,9 @@ public static Operation createMultisig( RegistryResult vcpResult = client.registries().create(createRegistryArgs); Operation op = vcpResult.op(); - Serder serder = vcpResult.getRegser(); - Serder anc = vcpResult.getSerder(); - List sigs = vcpResult.getSigs(); + Serder serder = vcpResult.regser(); + Serder anc = vcpResult.serder(); + List sigs = vcpResult.sigs(); List sigers = sigs.stream().map(Siger::new).toList(); String ims = new String(Eventing.messagize(anc, sigers, null, null, null, false)); From 1a4d3ebd118dc286ce90ea946754f657f3861495 Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Fri, 8 May 2026 15:35:15 +0700 Subject: [PATCH 19/20] specify types for MultisigUtils --- .../signify/e2e/DelegationMultisigTest.java | 6 +++--- .../signify/e2e/MultisigTest.java | 7 ++++--- .../signify/e2e/MultisigVleiIssuanaceTest.java | 17 +++++++++-------- .../signify/e2e/utils/MultisigUtils.java | 9 +++++---- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/test/java/org/cardanofoundation/signify/e2e/DelegationMultisigTest.java b/src/test/java/org/cardanofoundation/signify/e2e/DelegationMultisigTest.java index d0b2a02d..eac6d6e4 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/DelegationMultisigTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/DelegationMultisigTest.java @@ -9,10 +9,10 @@ import org.cardanofoundation.signify.e2e.utils.TestUtils.Notification; import org.cardanofoundation.signify.generated.keria.model.CompletedDelegatorOperation; import org.cardanofoundation.signify.generated.keria.model.DelegatorOperation; +import org.cardanofoundation.signify.generated.keria.model.EndRoleOperation; import org.cardanofoundation.signify.generated.keria.model.HabState; import org.cardanofoundation.signify.generated.keria.model.KelOperation; import org.cardanofoundation.signify.generated.keria.model.OOBI; -import org.cardanofoundation.signify.generated.keria.model.Operation; import org.cardanofoundation.signify.generated.keria.model.QueryOperation; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -154,7 +154,7 @@ void delegationMultisigTest() throws Exception { String delegatorGroupNameOobi = testSteps.step(String.format("Add and resolve delegator OOBI %s(%s)", delegatorGroupName, adelegatorGroupName.getPrefix()), () -> { String timestamp = createTimestamp(); try { - List opList1 = MultisigUtils.addEndRoleMultisig(delegator1Client, + List opList1 = MultisigUtils.addEndRoleMultisig(delegator1Client, delegatorGroupName, delegator1Aid, List.of(delegator2Aid), @@ -162,7 +162,7 @@ void delegationMultisigTest() throws Exception { timestamp, true); - List opList2 = MultisigUtils.addEndRoleMultisig(delegator2Client, + List opList2 = MultisigUtils.addEndRoleMultisig(delegator2Client, delegatorGroupName, delegator2Aid, List.of(delegator1Aid), diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java index 29ffaabd..3a16ca7b 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigTest.java @@ -25,6 +25,7 @@ import org.cardanofoundation.signify.generated.keria.model.ChallengeOperation; import org.cardanofoundation.signify.generated.keria.model.Credential; import org.cardanofoundation.signify.generated.keria.model.CredentialOperation; +import org.cardanofoundation.signify.generated.keria.model.EndRoleOperation; import org.cardanofoundation.signify.generated.keria.model.ExchangeOperation; import org.cardanofoundation.signify.generated.keria.model.Exn; import org.cardanofoundation.signify.generated.keria.model.ExchangeResource; @@ -275,7 +276,7 @@ public void multisig() throws Exception { HabState multisigAID = client1.identifiers().get("multisig").get(); String timestamp = TestUtils.createTimestamp(); - List opList1 = MultisigUtils.addEndRoleMultisigs( + List opList1 = MultisigUtils.addEndRoleMultisigs( client1, "multisig", aid1, @@ -285,7 +286,7 @@ public void multisig() throws Exception { true ); - List opList2 = MultisigUtils.addEndRoleMultisigs( + List opList2 = MultisigUtils.addEndRoleMultisigs( client2, "multisig", aid2, @@ -294,7 +295,7 @@ public void multisig() throws Exception { timestamp, false ); - List opList3 = MultisigUtils.addEndRoleMultisigs( + List opList3 = MultisigUtils.addEndRoleMultisigs( client3, "multisig", aid3, diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigVleiIssuanaceTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigVleiIssuanaceTest.java index 2d30a1ec..308cc3aa 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigVleiIssuanaceTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigVleiIssuanaceTest.java @@ -12,6 +12,7 @@ import org.cardanofoundation.signify.e2e.utils.TestUtils; import org.cardanofoundation.signify.generated.keria.model.Credential; import org.cardanofoundation.signify.generated.keria.model.CredentialSad; +import org.cardanofoundation.signify.generated.keria.model.EndRoleOperation; import org.cardanofoundation.signify.generated.keria.model.HabState; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; import org.cardanofoundation.signify.generated.keria.model.CredentialOperation; @@ -269,7 +270,7 @@ void testMultisigVleiIssuance() throws Exception { if (oobiGEDAbyGAR1.getOobis().size() == 0 || oobiGEDAbyGAR2.getOobis().size() == 0) { String timestamp = TestUtils.createTimestamp(); - List opList1 = MultisigUtils.addEndRoleMultisig( + List opList1 = MultisigUtils.addEndRoleMultisig( clientGAR1, aidGEDA.getName(), aidGAR1, @@ -279,7 +280,7 @@ void testMultisigVleiIssuance() throws Exception { true ); - List opList2 = MultisigUtils.addEndRoleMultisig( + List opList2 = MultisigUtils.addEndRoleMultisig( clientGAR2, aidGEDA.getName(), aidGAR2, @@ -445,7 +446,7 @@ void testMultisigVleiIssuance() throws Exception { || oobiQVIbyQAR2.getOobis().size() == 0 || oobiQVIbyQAR3.getOobis().size() == 0) { String timestamp = TestUtils.createTimestamp(); - List opList1 = MultisigUtils.addEndRoleMultisig( + List opList1 = MultisigUtils.addEndRoleMultisig( clientQAR1, aidQVI.getName(), aidQAR1, @@ -454,7 +455,7 @@ void testMultisigVleiIssuance() throws Exception { timestamp, true ); - List opList2 = MultisigUtils.addEndRoleMultisig( + List opList2 = MultisigUtils.addEndRoleMultisig( clientQAR2, aidQVI.getName(), aidQAR2, @@ -464,7 +465,7 @@ void testMultisigVleiIssuance() throws Exception { false ); - List opList3 = MultisigUtils.addEndRoleMultisig( + List opList3 = MultisigUtils.addEndRoleMultisig( clientQAR3, aidQVI.getName(), aidQAR3, @@ -801,7 +802,7 @@ void testMultisigVleiIssuance() throws Exception { || oobiLEbyLAR2.getOobis().size() == 0 || oobiLEbyLAR3.getOobis().size() == 0) { String timestamp = TestUtils.createTimestamp(); - List opList1 = MultisigUtils.addEndRoleMultisig( + List opList1 = MultisigUtils.addEndRoleMultisig( clientLAR1, aidLE.getName(), aidLAR1, @@ -811,7 +812,7 @@ void testMultisigVleiIssuance() throws Exception { true ); - List opList2 = MultisigUtils.addEndRoleMultisig( + List opList2 = MultisigUtils.addEndRoleMultisig( clientLAR2, aidLE.getName(), aidLAR2, @@ -821,7 +822,7 @@ void testMultisigVleiIssuance() throws Exception { false ); - List opList3 = MultisigUtils.addEndRoleMultisig( + List opList3 = MultisigUtils.addEndRoleMultisig( clientLAR3, aidLE.getName(), aidLAR3, diff --git a/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java b/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java index 7f7107e3..18fd69cc 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java @@ -32,6 +32,7 @@ import org.cardanofoundation.signify.generated.keria.model.Credential; import org.cardanofoundation.signify.generated.keria.model.CredentialOperation; import org.cardanofoundation.signify.generated.keria.model.DelegatorOperation; +import org.cardanofoundation.signify.generated.keria.model.EndRoleOperation; import org.cardanofoundation.signify.generated.keria.model.Exn; import org.cardanofoundation.signify.generated.keria.model.ExnMultisig; import org.cardanofoundation.signify.generated.keria.model.GroupMember; @@ -198,7 +199,7 @@ public static KelOperation rotateMultisig(SignifyClient client, String groupName return interactResult.op(); } - public static List addEndRoleMultisig(SignifyClient client, String groupName, HabState aid, + public static List addEndRoleMultisig(SignifyClient client, String groupName, HabState aid, List otherMemberAIDs, HabState multisigAID, String timestamp, boolean isInitiator) throws Exception { @@ -206,7 +207,7 @@ public static List addEndRoleMultisig(SignifyClient client, String gr TestUtils.waitAndMarkNotification(client, "/multisig/rpy"); } - List opList = new ArrayList<>(); + List opList = new ArrayList<>(); GroupMember members = client.identifiers().members(groupName); for (AidRecord signing : members.getSigning()) { @@ -252,7 +253,7 @@ public static List addEndRoleMultisig(SignifyClient client, String gr return opList; } - public static List addEndRoleMultisigs(SignifyClient client, String groupName, HabState aid, + public static List addEndRoleMultisigs(SignifyClient client, String groupName, HabState aid, List otherMemberAIDs, HabState multisigAID, String timestamp, boolean isInitiator) throws Exception { @@ -260,7 +261,7 @@ public static List addEndRoleMultisigs(SignifyClient client, String g TestUtils.waitAndMarkNotification(client, "/multisig/rpy"); } - List opList = new ArrayList<>(); + List opList = new ArrayList<>(); GroupMember members = client.identifiers().members(groupName); String eid = members.getSigning().getFirst().getEnds().getAgent().keySet().iterator().next(); From 487aee33c31fbb3c246ae67ca5cfbe3c23bb385e Mon Sep 17 00:00:00 2001 From: Patrick Vu Date: Fri, 8 May 2026 17:15:14 +0700 Subject: [PATCH 20/20] more specific types for some op tests --- .../signify/e2e/DelegationTest.java | 4 +- .../e2e/MultisigVleiIssuanaceTest.java | 40 ++++++++++--------- .../signify/e2e/utils/MultisigUtils.java | 7 ++-- 3 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/test/java/org/cardanofoundation/signify/e2e/DelegationTest.java b/src/test/java/org/cardanofoundation/signify/e2e/DelegationTest.java index d82fbaaf..b6dc0bf1 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/DelegationTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/DelegationTest.java @@ -6,8 +6,8 @@ import org.cardanofoundation.signify.app.coring.Coring; import org.cardanofoundation.signify.e2e.utils.TestSteps; import org.cardanofoundation.signify.generated.keria.model.HabState; +import org.cardanofoundation.signify.generated.keria.model.KelOperation; import org.cardanofoundation.signify.generated.keria.model.OOBI; -import org.cardanofoundation.signify.generated.keria.model.Operation; import org.cardanofoundation.signify.generated.keria.model.QueryOperation; import org.cardanofoundation.signify.generated.keria.model.Tier; import org.junit.jupiter.api.Test; @@ -83,7 +83,7 @@ void delegationTest() throws Exception { CreateIdentifierArgs delpre = new CreateIdentifierArgs(); delpre.setDelpre(ator.getPrefix()); var icpResult2 = client2.identifiers().create("delegate", delpre); - Operation op2 = icpResult2.op(); + KelOperation op2 = icpResult2.op(); opResponseName = op2.getName(); String delegatePrefix = opResponseName.split("\\.")[1]; System.out.println("Delegate's prefix: " + delegatePrefix); diff --git a/src/test/java/org/cardanofoundation/signify/e2e/MultisigVleiIssuanaceTest.java b/src/test/java/org/cardanofoundation/signify/e2e/MultisigVleiIssuanaceTest.java index 308cc3aa..277bc8e8 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/MultisigVleiIssuanaceTest.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/MultisigVleiIssuanaceTest.java @@ -16,8 +16,10 @@ import org.cardanofoundation.signify.generated.keria.model.HabState; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; import org.cardanofoundation.signify.generated.keria.model.CredentialOperation; +import org.cardanofoundation.signify.generated.keria.model.DelegatorOperation; +import org.cardanofoundation.signify.generated.keria.model.GroupOperation; import org.cardanofoundation.signify.generated.keria.model.OOBI; -import org.cardanofoundation.signify.generated.keria.model.Operation; +import org.cardanofoundation.signify.generated.keria.model.RegistryOperation; import org.cardanofoundation.signify.generated.keria.model.QueryOperation; import org.cardanofoundation.signify.generated.keria.model.Registry; import org.junit.jupiter.api.DisplayName; @@ -229,7 +231,7 @@ void testMultisigVleiIssuance() throws Exception { .build(); kargsMultisigAID.setMhab(aidGAR1); - Operation multisigAIDOp1 = MultisigUtils.createAIDMultisig( + GroupOperation multisigAIDOp1 = MultisigUtils.createAIDMultisig( clientGAR1, aidGAR1, List.of(aidGAR2), @@ -239,7 +241,7 @@ void testMultisigVleiIssuance() throws Exception { ); kargsMultisigAID.setMhab(aidGAR2); - Operation multisigAIDOp2 = MultisigUtils.createAIDMultisig( + GroupOperation multisigAIDOp2 = MultisigUtils.createAIDMultisig( clientGAR2, aidGAR2, List.of(aidGAR1), @@ -340,7 +342,7 @@ void testMultisigVleiIssuance() throws Exception { .build(); kargsMultisigAID.setMhab(aidQAR1); - Operation multisigAIDOp1 = MultisigUtils.createAIDMultisig( + GroupOperation multisigAIDOp1 = MultisigUtils.createAIDMultisig( clientQAR1, aidQAR1, List.of(aidQAR2, aidQAR3), @@ -350,7 +352,7 @@ void testMultisigVleiIssuance() throws Exception { ); kargsMultisigAID.setMhab(aidQAR2); - Operation multisigAIDOp2 = MultisigUtils.createAIDMultisig( + GroupOperation multisigAIDOp2 = MultisigUtils.createAIDMultisig( clientQAR2, aidQAR2, List.of(aidQAR1, aidQAR3), @@ -360,7 +362,7 @@ void testMultisigVleiIssuance() throws Exception { ); kargsMultisigAID.setMhab(aidQAR3); - Operation multisigAIDOp3 = MultisigUtils.createAIDMultisig( + GroupOperation multisigAIDOp3 = MultisigUtils.createAIDMultisig( clientQAR3, aidQAR3, List.of(aidQAR1, aidQAR2), @@ -379,7 +381,7 @@ void testMultisigVleiIssuance() throws Exception { put("s", "0"); put("d", aidQVIPrefix); }}; - Operation ixnOp1 = MultisigUtils.delegateMultisig( + DelegatorOperation ixnOp1 = MultisigUtils.delegateMultisig( clientGAR1, aidGAR1, List.of(aidGAR2), @@ -388,7 +390,7 @@ void testMultisigVleiIssuance() throws Exception { true ); - Operation ixnOp2 = MultisigUtils.delegateMultisig( + DelegatorOperation ixnOp2 = MultisigUtils.delegateMultisig( clientGAR2, aidGAR2, List.of(aidGAR1), @@ -519,7 +521,7 @@ void testMultisigVleiIssuance() throws Exception { if (gedaRegistrybyGAR1.size() == 0 && gedaRegistrybyGAR2.size() == 0) { String nonce = Coring.randomNonce(); - Operation registryOp1 = MultisigUtils.createRegistryMultisig( + RegistryOperation registryOp1 = MultisigUtils.createRegistryMultisig( clientGAR1, aidGAR1, List.of(aidGAR2), @@ -529,7 +531,7 @@ void testMultisigVleiIssuance() throws Exception { true ); - Operation registryOp2 = MultisigUtils.createRegistryMultisig( + RegistryOperation registryOp2 = MultisigUtils.createRegistryMultisig( clientGAR2, aidGAR2, List.of(aidGAR1), @@ -740,7 +742,7 @@ void testMultisigVleiIssuance() throws Exception { .build(); kargsMultisigAID.setMhab(aidLAR1); - Operation multisigAIDOp1 = MultisigUtils.createAIDMultisig( + GroupOperation multisigAIDOp1 = MultisigUtils.createAIDMultisig( clientLAR1, aidLAR1, List.of(aidLAR2, aidLAR3), @@ -750,7 +752,7 @@ void testMultisigVleiIssuance() throws Exception { ); kargsMultisigAID.setMhab(aidLAR2); - Operation multisigAIDOp2 = MultisigUtils.createAIDMultisig( + GroupOperation multisigAIDOp2 = MultisigUtils.createAIDMultisig( clientLAR2, aidLAR2, List.of(aidLAR1, aidLAR3), @@ -760,7 +762,7 @@ void testMultisigVleiIssuance() throws Exception { ); kargsMultisigAID.setMhab(aidLAR3); - Operation multisigAIDOp3 = MultisigUtils.createAIDMultisig( + GroupOperation multisigAIDOp3 = MultisigUtils.createAIDMultisig( clientLAR3, aidLAR3, List.of(aidLAR1, aidLAR2), @@ -875,7 +877,7 @@ void testMultisigVleiIssuance() throws Exception { List qviRegistrybyQAR3 = clientQAR3.registries().list(aidQVI.getName()); if (qviRegistrybyQAR1.size() == 0 || qviRegistrybyQAR2.size() == 0 || qviRegistrybyQAR3.size() == 0) { String nonce = Coring.randomNonce(); - Operation registryOp1 = MultisigUtils.createRegistryMultisig( + RegistryOperation registryOp1 = MultisigUtils.createRegistryMultisig( clientQAR1, aidQAR1, List.of(aidQAR2, aidQAR3), @@ -885,7 +887,7 @@ void testMultisigVleiIssuance() throws Exception { true ); - Operation registryOp2 = MultisigUtils.createRegistryMultisig( + RegistryOperation registryOp2 = MultisigUtils.createRegistryMultisig( clientQAR2, aidQAR2, List.of(aidQAR1, aidQAR3), @@ -895,7 +897,7 @@ void testMultisigVleiIssuance() throws Exception { false ); - Operation registryOp3 = MultisigUtils.createRegistryMultisig( + RegistryOperation registryOp3 = MultisigUtils.createRegistryMultisig( clientQAR3, aidQAR3, List.of(aidQAR1, aidQAR2), @@ -1140,7 +1142,7 @@ void testMultisigVleiIssuance() throws Exception { if (leRegistrybyLAR1.isEmpty() && leRegistrybyLAR2.isEmpty() && leRegistrybyLAR3.isEmpty()) { String nonce = Coring.randomNonce(); - Operation registryOp1 = MultisigUtils.createRegistryMultisig( + RegistryOperation registryOp1 = MultisigUtils.createRegistryMultisig( clientLAR1, aidLAR1, List.of(aidLAR2, aidLAR3), @@ -1150,7 +1152,7 @@ void testMultisigVleiIssuance() throws Exception { true ); - Operation registryOp2 = MultisigUtils.createRegistryMultisig( + RegistryOperation registryOp2 = MultisigUtils.createRegistryMultisig( clientLAR2, aidLAR2, List.of(aidLAR1, aidLAR3), @@ -1160,7 +1162,7 @@ void testMultisigVleiIssuance() throws Exception { false ); - Operation registryOp3 = MultisigUtils.createRegistryMultisig( + RegistryOperation registryOp3 = MultisigUtils.createRegistryMultisig( clientLAR3, aidLAR3, List.of(aidLAR1, aidLAR2), diff --git a/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java b/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java index 18fd69cc..aa60e933 100644 --- a/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java +++ b/src/test/java/org/cardanofoundation/signify/e2e/utils/MultisigUtils.java @@ -40,7 +40,6 @@ import org.cardanofoundation.signify.generated.keria.model.HabState; import org.cardanofoundation.signify.generated.keria.model.KelOperation; import org.cardanofoundation.signify.generated.keria.model.KeyStateRecord; -import org.cardanofoundation.signify.generated.keria.model.Operation; import org.cardanofoundation.signify.generated.keria.model.RegistryOperation; @SuppressWarnings("unchecked") @@ -439,7 +438,7 @@ public static RegistryOperation createRegistryMultisig( .nonce(nonce) .build(); RegistryResult vcpResult = client.registries().create(createRegistryArgs); - RegistryOperation op = (RegistryOperation) vcpResult.op(); + RegistryOperation op = vcpResult.op(); Serder serder = vcpResult.regser(); Serder anc = vcpResult.serder(); @@ -483,7 +482,7 @@ public static RegistryOperation createRegistryMultisig( return createRegistryMultisig(client, aid, otherMembersAIDs, multisigAID, registryName, nonce, "registry", isInitiator); } - public static Operation createMultisig( + public static RegistryOperation createMultisig( SignifyClient client, HabState aid, List otherMembersAIDs, @@ -503,7 +502,7 @@ public static Operation createMultisig( .nonce(nonce) .build(); RegistryResult vcpResult = client.registries().create(createRegistryArgs); - Operation op = vcpResult.op(); + RegistryOperation op = vcpResult.op(); Serder serder = vcpResult.regser(); Serder anc = vcpResult.serder();