Skip to content
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,4 @@ dependency-reduced-pom.xml
mem*.db

README.html
/CLAUDE.md
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.8</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
160 changes: 158 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,9 @@ public class Document extends GenericId {
* Free form invites info
*/
public List<DocumentSignRequestInfo> requests;
@JsonProperty("fields")
public List<FieldMetadata> fields;
public List<Role> roles;

public static class SigningLinkRequest {
@JsonProperty("document_id")
Expand Down Expand Up @@ -127,6 +129,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 +145,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,11 +178,70 @@ 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;
public String email;
public String role;
@JsonProperty("role_id")
public String roleId;
@JsonProperty("is_embedded")
public Boolean isEmbedded;
}

@JsonIgnoreProperties(ignoreUnknown = true)
public static class Role {
@JsonProperty("unique_id")
public String uniqueId;
/**
* SignNow returns this number as a string, same as {@link Document#pageCount}
*/
@JsonProperty("signing_order")
public String signingOrder;
public String name;
}

@JsonIgnoreProperties(ignoreUnknown = true)
Expand All @@ -175,4 +257,78 @@ 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";
@JsonProperty("first_name")
public String firstName;
@JsonProperty("last_name")
public String lastName;
public String language;

/**
* @param email signer email
* @param role role NAME (e.g. "Signer 1"), not the role id. To create an invite
* by role id use {@link #forRoleId(String, String)}.
*/
public EmbeddedInvite(String email, String role) {
this.email = email;
this.role = role;
}

/**
* Creates an invite addressed by role id (the {@code unique_id} of a {@link Role}).
*
* @param email signer email
* @param roleId role id from {@link Document#roles} ({@link Role#uniqueId})
*/
public static EmbeddedInvite forRoleId(String email, String roleId) {
EmbeddedInvite invite = new EmbeddedInvite(email, null);
invite.role_id = roleId;
return invite;
}
}

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");
}
}
}
Loading