Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion client-lib/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

<groupId>com.signnow</groupId>
<artifactId>api-client-lib</artifactId>
<version>1.0.0-SNAPSHOT</version>
<version>1.0.6</version>
<packaging>jar</packaging>

<properties>
Expand Down Expand Up @@ -94,4 +94,13 @@
</plugin>
</plugins>
</build>

<distributionManagement>
<repository>
<id>github</id>
<name>Darwin</name>
<url>https://maven.pkg.github.com/SSDevelopment/DarwinOperations</url>
</repository>
</distributionManagement>

</project>
12 changes: 8 additions & 4 deletions client-lib/src/main/java/com/signnow/library/SNClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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) {
Expand All @@ -61,6 +60,11 @@ public Templates templatesService() {
return templatesService;
}

@Override
public Webhooks webhooksService() {
return webhooksService;
}

@Override
public DocumentGroups documentGroupsService() {
return documentGroupsService;
Expand Down
121 changes: 119 additions & 2 deletions client-lib/src/main/java/com/signnow/library/dto/Document.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -28,6 +27,8 @@ public class Document extends GenericId {
* Free form invites info
*/
public List<DocumentSignRequestInfo> requests;
@JsonProperty("fields")
public List<FieldMetadata> fields;

public static class SigningLinkRequest {
@JsonProperty("document_id")
Expand Down Expand Up @@ -127,6 +128,14 @@ public String toString() {
}
}

public static class PrefillTextRequest {
public final List<FieldText> fields;

public PrefillTextRequest(List<FieldText> fields) {
this.fields = fields;
}
}

public static class FieldsUpdateRequest {
public final List<Field> fields;

Expand All @@ -135,6 +144,19 @@ public FieldsUpdateRequest(List<Field> 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;
Expand All @@ -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;
Expand All @@ -175,4 +240,56 @@ public static class DocumentDownloadLink {
public String link;
}

/*------------------------Embedded invites------------------------*/
public static class EmbeddedSigningInviteRequest {
public final List<EmbeddedInvite> 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<InviteResponseData> 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<String, String> data = new HashMap<>();

public String getLink() {
return data.get("link");
}
}
}
37 changes: 37 additions & 0 deletions client-lib/src/main/java/com/signnow/library/dto/Webhook.java
Original file line number Diff line number Diff line change
@@ -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<String, String> 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<String, String> headers;

Attributes(String callback, Map<String, String> headers) {
this.callback = callback;
this.headers = headers;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<Document.Field> request) throws SNException;

void prefillText(String documentId, List<Document.FieldText> request) throws SNException;

Document getDocument(String documentId) throws SNException;

void deleteDocument(String documentId) throws SNException;

String getDownloadLink(String documentId) throws SNException;

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@ public interface ServiceProvider {
Templates templatesService();

DocumentGroups documentGroupsService();

Webhooks webhooksService();
}
10 changes: 10 additions & 0 deletions client-lib/src/main/java/com/signnow/library/facades/Webhooks.java
Original file line number Diff line number Diff line change
@@ -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<String, String> headers) throws SNException;
void delete(String webhookId) throws SNException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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<String, String> 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<Document.FieldText> 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<Document.Field> request) throws SNException {
client.put(
Expand Down Expand Up @@ -109,4 +141,5 @@ public String getDownloadLink(String documentId) throws SNException {
Document.DocumentDownloadLink.class
).link;
}

}
Original file line number Diff line number Diff line change
@@ -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<String, String> 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
);
}
}