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
+ );
+ }
+}