diff --git a/client-lib/pom.xml b/client-lib/pom.xml index 0550326..1528d0a 100644 --- a/client-lib/pom.xml +++ b/client-lib/pom.xml @@ -5,7 +5,7 @@ com.signnow api-client-lib - 1.0.0-SNAPSHOT + 1.0.6 jar @@ -94,4 +94,13 @@ + + + + github + Darwin + https://maven.pkg.github.com/SSDevelopment/DarwinOperations + + + diff --git a/client-lib/src/main/java/com/signnow/library/SNClient.java b/client-lib/src/main/java/com/signnow/library/SNClient.java index ebbc099..5b9ad4c 100644 --- a/client-lib/src/main/java/com/signnow/library/SNClient.java +++ b/client-lib/src/main/java/com/signnow/library/SNClient.java @@ -5,13 +5,11 @@ import com.signnow.library.dto.User; import com.signnow.library.exceptions.SNApiException; import com.signnow.library.exceptions.SNException; -import com.signnow.library.facades.DocumentGroups; -import com.signnow.library.facades.Documents; -import com.signnow.library.facades.ServiceProvider; -import com.signnow.library.facades.Templates; +import com.signnow.library.facades.*; import com.signnow.library.services.DocumentGroupsService; import com.signnow.library.services.DocumentsService; import com.signnow.library.services.TemplatesService; +import com.signnow.library.services.WebhookService; import javax.ws.rs.client.Entity; import javax.ws.rs.client.Invocation; @@ -36,6 +34,7 @@ public class SNClient implements ServiceProvider { private WebTarget apiWebTarget; private Documents documentsService = new DocumentsService(this); private Templates templatesService = new TemplatesService(this); + private Webhooks webhooksService = new WebhookService(this); private DocumentGroups documentGroupsService = new DocumentGroupsService(this); protected SNClient(WebTarget apiWebTarget, User user) { @@ -61,6 +60,11 @@ public Templates templatesService() { return templatesService; } + @Override + public Webhooks webhooksService() { + return webhooksService; + } + @Override public DocumentGroups documentGroupsService() { return documentGroupsService; diff --git a/client-lib/src/main/java/com/signnow/library/dto/Document.java b/client-lib/src/main/java/com/signnow/library/dto/Document.java index b442028..780af8b 100644 --- a/client-lib/src/main/java/com/signnow/library/dto/Document.java +++ b/client-lib/src/main/java/com/signnow/library/dto/Document.java @@ -2,8 +2,7 @@ import com.fasterxml.jackson.annotation.*; -import java.util.ArrayList; -import java.util.List; +import java.util.*; @JsonIgnoreProperties(ignoreUnknown = true) public class Document extends GenericId { @@ -28,6 +27,8 @@ public class Document extends GenericId { * Free form invites info */ public List requests; + @JsonProperty("fields") + public List fields; public static class SigningLinkRequest { @JsonProperty("document_id") @@ -127,6 +128,14 @@ public String toString() { } } + public static class PrefillTextRequest { + public final List fields; + + public PrefillTextRequest(List fields) { + this.fields = fields; + } + } + public static class FieldsUpdateRequest { public final List fields; @@ -135,6 +144,19 @@ public FieldsUpdateRequest(List fields) { } } + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class FieldText { + @JsonProperty("field_name") + public String fieldName; + @JsonProperty("prefilled_text") + public String prefilledText; + + public FieldText(String name, String prefill) { + this.fieldName = name; + this.prefilledText = prefill; + } + } + @JsonInclude(JsonInclude.Include.NON_NULL) public static class Field { public int x; @@ -155,6 +177,49 @@ public String getType() { } } + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class FieldMetadata { + public String id; + public String type; + @JsonProperty("role_id") + public String roleId; + public String role; + public String originator; + public String fulfiller; + @JsonProperty("json_attributes") + public Attributes attributes; + @JsonProperty("field_request_id") + public String fieldRequestId; + @JsonProperty("element_id") + public String elementId; + @JsonProperty("field_request_canceled") + public boolean fieldRequestCanceled; + @JsonProperty("template_field_id") + public String templateFieldId; + @JsonProperty("field_id") + public String fieldId; + + public String getType() { + return type.toString(); + } + + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Attributes { + @JsonProperty("page_number") + public String pageNumber; + public int x; + public int y; + public int width; + public int height; + public boolean required; + public String name; + public String label; + @JsonProperty("prefilled_text") + public String prefilledText; + } + } + @JsonIgnoreProperties(ignoreUnknown = true) public static class FieldInvite extends GenericId { public String status; @@ -175,4 +240,56 @@ public static class DocumentDownloadLink { public String link; } + /*------------------------Embedded invites------------------------*/ + public static class EmbeddedSigningInviteRequest { + public final List invites = new ArrayList<>(); + + public EmbeddedSigningInviteRequest(EmbeddedInvite... invite) { + this.invites.addAll(Arrays.asList(invite)); + } + } + + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class EmbeddedInvite { + public String email; + public String role_id; + public String role; + public int order = 1; + @JsonProperty("auth_method") + public String authMethod = "none"; + + public EmbeddedInvite(String email, String role) { + this.email = email; + this.role = role; + } + } + + public static class EmbeddedSigningInviteResponse { + public List data = new ArrayList<>(); + } + + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class InviteResponseData { + public String id; + public String email; + @JsonProperty("role_id") + public String roleId; + public int order; + public String status; + } + + public static class EmbeddedInviteLinkRequest { + @JsonProperty("link_expiration") + public int linkExpiration = 45; + @JsonProperty("auth_method") + public String authMethod = "none"; + } + + public static class EmbeddedInviteLinkResponse { + public Map data = new HashMap<>(); + + public String getLink() { + return data.get("link"); + } + } } diff --git a/client-lib/src/main/java/com/signnow/library/dto/Webhook.java b/client-lib/src/main/java/com/signnow/library/dto/Webhook.java new file mode 100644 index 0000000..a11115d --- /dev/null +++ b/client-lib/src/main/java/com/signnow/library/dto/Webhook.java @@ -0,0 +1,37 @@ +package com.signnow.library.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.Map; + +public class Webhook { + public static class CreateRequest { + @JsonProperty("event") + public final String event; + @JsonProperty("entity_id") + public final String entityId; + @JsonProperty("action") + public final String action = "callback"; + @JsonProperty("attributes") + public final Attributes attributes; + + public CreateRequest(String event, String entityId, String callback, Map headers) { + this.event = event; + this.entityId = entityId; + this.attributes = new Attributes(callback, headers); + } + } + + static class Attributes { + @JsonProperty("callback") + public final String callback; + + @JsonProperty("headers") + public final Map headers; + + Attributes(String callback, Map headers) { + this.callback = callback; + this.headers = headers; + } + } +} diff --git a/client-lib/src/main/java/com/signnow/library/facades/Documents.java b/client-lib/src/main/java/com/signnow/library/facades/Documents.java index a1a6539..3e2550c 100644 --- a/client-lib/src/main/java/com/signnow/library/facades/Documents.java +++ b/client-lib/src/main/java/com/signnow/library/facades/Documents.java @@ -22,11 +22,18 @@ public interface Documents { void sendDocumentSignInvite(String documentId, Document.SigningInviteWithRolesRequest request) throws SNException; + Document.EmbeddedSigningInviteResponse createDocumentEmbeddedSignInvite(String documentId, Document.EmbeddedSigningInviteRequest request) throws SNException; + + String getDocumentEmbeddedSignInviteLink(String documentId, String inviteId, Document.EmbeddedInviteLinkRequest request) throws SNException; + void updateDocumentFields(String documentId, List request) throws SNException; + void prefillText(String documentId, List request) throws SNException; + Document getDocument(String documentId) throws SNException; void deleteDocument(String documentId) throws SNException; String getDownloadLink(String documentId) throws SNException; + } diff --git a/client-lib/src/main/java/com/signnow/library/facades/ServiceProvider.java b/client-lib/src/main/java/com/signnow/library/facades/ServiceProvider.java index 0e979cb..2edf25c 100644 --- a/client-lib/src/main/java/com/signnow/library/facades/ServiceProvider.java +++ b/client-lib/src/main/java/com/signnow/library/facades/ServiceProvider.java @@ -6,4 +6,6 @@ public interface ServiceProvider { Templates templatesService(); DocumentGroups documentGroupsService(); + + Webhooks webhooksService(); } diff --git a/client-lib/src/main/java/com/signnow/library/facades/Webhooks.java b/client-lib/src/main/java/com/signnow/library/facades/Webhooks.java new file mode 100644 index 0000000..b790b4e --- /dev/null +++ b/client-lib/src/main/java/com/signnow/library/facades/Webhooks.java @@ -0,0 +1,10 @@ +package com.signnow.library.facades; + +import com.signnow.library.exceptions.SNException; + +import java.util.Map; + +public interface Webhooks { + void add(String event, String entityId, String callback, Map headers) throws SNException; + void delete(String webhookId) throws SNException; +} diff --git a/client-lib/src/main/java/com/signnow/library/services/DocumentsService.java b/client-lib/src/main/java/com/signnow/library/services/DocumentsService.java index 551f64f..e50b0a0 100644 --- a/client-lib/src/main/java/com/signnow/library/services/DocumentsService.java +++ b/client-lib/src/main/java/com/signnow/library/services/DocumentsService.java @@ -14,7 +14,9 @@ import javax.ws.rs.core.Response; import java.io.InputStream; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class DocumentsService extends ApiService implements Documents { public DocumentsService(SNClient client) { @@ -72,6 +74,36 @@ public void sendDocumentSignInvite(String documentId, Document.SigningInviteWith ); } + @Override + public Document.EmbeddedSigningInviteResponse createDocumentEmbeddedSignInvite(String documentId, Document.EmbeddedSigningInviteRequest request) throws SNException { + return client.post( + "/v2/documents/{document_id}/embedded-invites", + Collections.singletonMap("document_id", documentId), + request, + Document.EmbeddedSigningInviteResponse.class); + } + + @Override + public String getDocumentEmbeddedSignInviteLink(String documentId, String inviteId, Document.EmbeddedInviteLinkRequest request) throws SNException { + Map params = new HashMap<>(); + params.put("document_id", documentId); + params.put("fieldInviteUniqueId", inviteId); + Document.EmbeddedInviteLinkResponse response = client.post( + "/v2/documents/{document_id}/embedded-invites/{fieldInviteUniqueId}/link", + params, request, Document.EmbeddedInviteLinkResponse.class); + return response.getLink(); + } + + @Override + public void prefillText(String documentId, List request) throws SNException { + client.put( + "/v2/documents/{documentId}/prefill-texts", + Collections.singletonMap("documentId", documentId), + new Document.PrefillTextRequest(request), + String.class + ); + } + @Override public void updateDocumentFields(String documentId, List request) throws SNException { client.put( @@ -109,4 +141,5 @@ public String getDownloadLink(String documentId) throws SNException { Document.DocumentDownloadLink.class ).link; } + } diff --git a/client-lib/src/main/java/com/signnow/library/services/WebhookService.java b/client-lib/src/main/java/com/signnow/library/services/WebhookService.java new file mode 100644 index 0000000..142bda8 --- /dev/null +++ b/client-lib/src/main/java/com/signnow/library/services/WebhookService.java @@ -0,0 +1,34 @@ +package com.signnow.library.services; + +import com.signnow.library.SNClient; +import com.signnow.library.dto.Webhook; +import com.signnow.library.exceptions.SNException; +import com.signnow.library.facades.Webhooks; + +import java.util.Collections; +import java.util.Map; + +public class WebhookService extends ApiService implements Webhooks { + public WebhookService(SNClient client) { + super(client); + } + + @Override + public void add(String event, String entityId, String callback, Map headers) throws SNException { + client.post( + "/api/v2/events", + null, + new Webhook.CreateRequest(event, entityId, callback, headers), + String.class + ); + } + + @Override + public void delete(String eventSubscriptionId) throws SNException { + client.delete( + "/api/v2/events/{eventSubscriptionId}", + Collections.singletonMap("eventSubscriptionId", eventSubscriptionId), + String.class + ); + } +}