e-sign-api
Version:
A simple to use controller for the E-Sign API
1,097 lines (1,050 loc) • 29.7 kB
text/typescript
// This NPM package was created by Isaac Hughes For E-Sign UK
// https://www.linkedin.com/in/isaac-hughes-software-developer/
// Github Repo
// https://github.com/Isaac-hughes/e-sign-api
// E-Sign API for enterprise customers of e-sign
"use strict";
import axios from 'axios'
// Roots for all calls
const SANDBOX_ROOT_URL: string = "https://sandbox.e-sign.co.uk/v3/";
const ROOT_URL: string = "https://api.e-sign.co.uk/v3/";
// the environment can either be sandbox or live
// defaults to sandbox
let environment: string = SANDBOX_ROOT_URL;
// This function is the gateway to all functions
export let esign = async (apiKey: string, call: string, data: any, sandbox: boolean) => {
// set the environment based on a boolean balue for sandbox
if(sandbox){
environment = SANDBOX_ROOT_URL;
} else if (!sandbox){
environment = ROOT_URL;
} else{
environment = SANDBOX_ROOT_URL;
}
// how this function works
// Check all the parameters are valid
// Select the correct object
if(call != undefined && call != null && call != ""){
// get the data for the call
let callData = await getCallData(call);
if(callData == undefined){
console.log('call failed, call data undefined')
return({
message:"The call you passed does not match any defined call",
call: call
})
} else {
let method = callData.method;
let path = callData.path;
let headers = {'Authorization': `Token ${apiKey}`};
let body = data.body
// Makes two differernt calls depending on whether parameters or needed
if(callData.parameters){
let parameters = data.parameters;
let pathWithParameters = getPath(path, parameters)
if(body == {} || body == undefined){
let response: any = await makeRequest(method, pathWithParameters, headers, null, parameters)
let responseObject: any = {
json: response.data,
status: response.status,
statusText: response.statusText,
headers: response.headers
}
return responseObject
} else{
let response: any = await makeRequest(method, pathWithParameters, headers, data, parameters)
let responseObject: any = {
json: response.data,
status: response.status,
statusText: response.statusText,
headers: response.headers
}
return responseObject
}
} else{
if(body == {} || body == undefined){
let response: any = await makeRequest(method, path, headers, null, null)
let responseObject: any = {
json: response.data,
status: response.status,
statusText: response.statusText,
headers: response.headers
}
return responseObject
} else{
let response: any = await makeRequest(method, path, headers, data, null)
let responseObject: any = {
json: response.data,
status: response.status,
statusText: response.statusText,
headers: response.headers
}
return responseObject
}
}
}
} else{
console.log("The call you passed does not match any defined call", call)
return {message: "The call you passed does not match any defined call"}
}
}
// Axios has been installed to facilitate the HTTP requests
// This package is designed to run off constants rather than many functions
// This makes the package more efficient, and much quicker to write...
let makeRequest = async (method: any, path: any, headers: any, data: any, parameters: any) => {
// Two seprate calls depending on if parameters are defined
if(parameters != null){
// Function construsts the path from the path and the path parameters
let pathAndParameters = getPath(path, parameters)
if(data != null){
// Axios http call
try {
let axiosData: any = await axios({
method: method,
url: environment + path,
headers: headers,
responseType: 'json'
})
return axiosData
} catch (error) {
return error
}
}else{
// Axios http call
try {
let axiosData: any = await axios({
method: method,
url: environment + path,
headers: headers,
responseType: 'json'
})
return axiosData
} catch (error) {
return error
}
}
} else {
if(data != null){
// Axios http call
try {
let axiosData: any = await axios({
method: method,
url: environment + path,
headers: headers,
responseType: 'json'
})
return axiosData
} catch (error) {
return error
}
} else {
// Axios http call
try {
let axiosData: any = await axios({
method: method,
url: environment + path,
headers: headers,
responseType: 'json'
})
return axiosData
} catch (error) {
return error
}
}
}
}
// This function takes the path and parameters and returns the completed path for the request
let getPath = (path: any, parameters: any) => {
// this function takes the path from the call data object and a parameters object
// It looks through the path string and identifies which parts are parameters
// It then searches the parameters object for the relevant parameter
// It returns the completed path as a string
let arr = path.split('/')
let returnPath = '';
for(let i = 0; i < arr.length; i++){
if (arr[i][0] == '{'){
let paramSearch = arr[i].slice(1,-1);
let param = parameters[paramSearch];
returnPath = returnPath + '/' + param;
} else {
if (returnPath == ''){
returnPath = arr[i];
} else{
returnPath = returnPath + '/' + arr[i];
}
}
}
return returnPath
}
// Assign the data fir the http call
let getCallData = (call: any) =>{
let returnData;
switch (call) {
// Accounts
case 'createAccount':
returnData = createAccount;
break;
case 'retrieveAccount':
returnData = retrieveAccount;
break;
case 'updateAccount':
returnData = updateAccount;
break;
case 'deleteAccount':
returnData = deleteAccount;
break;
case 'getAccountWithAllUsers':
returnData = getAccountWithAllUsers;
break;
case 'getAccountStats':
returnData = getAccountStats;
break;
case 'getRecentEvents':
returnData = getRecentEvents;
break;
case 'getExtensionsList':
returnData = getExtensionsList;
break;
case 'enableExtension':
returnData = enableExtension;
break;
case 'disableExtension':
returnData = disableExtension;
break;
// Envelopes
case 'createEnvelope':
returnData = createEnvelope;
break;
case 'retrieveEnvelope':
returnData = retrieveEnvelope;
break;
case 'archiveEnvelope':
returnData = archiveEnvelope;
break;
case 'restoreEnvelope':
returnData = restoreEnvelope;
break;
case 'redirectToWebApp':
returnData = redirectToWebApp;
break;
case 'getSignedEnvelopes':
returnData = getSignedEnvelopes;
break;
case 'getCompletedEnvelopes':
returnData = getCompletedEnvelopes;
break;
case 'getPendingEnvelopes':
returnData = getPendingEnvelopes;
break;
case 'getDeclinedEnvelopes':
returnData = getDeclinedEnvelopes;
break;
case 'getArchivedEnvelopes':
returnData = getArchivedEnvelopes;
break;
case 'getEnvelope':
returnData = getEnvelope;
break;
case 'permanentlyDeleteEnvelope':
returnData = permanentlyDeleteEnvelope;
break;
case 'getSignerEnvelope':
returnData = getSignerEnvelope;
break;
case 'getAuditTrail':
returnData = getAuditTrail;
break;
case 'getAttachments':
returnData = getAttachments;
break;
// OAuth
case 'createOauthApp':
returnData = createOauthApp;
break;
case 'getOauthApps':
returnData = getOauthApps;
break;
case 'getOauthApp':
returnData = getOauthApp;
break;
case 'deleteOauthApp':
returnData = deleteOauthApp;
break;
case 'createAuthCode':
returnData = createAuthCode;
break;
case 'retrieveAccessToken':
returnData = retrieveAccessToken;
break;
case 'revokeAccessToken':
returnData = revokeAccessToken;
break;
case 'getTokenInfo':
returnData = getTokenInfo;
break;
// Payments
case 'addPaymentDetails':
returnData = addPaymentDetails;
break;
case 'deletePaymentDetails':
returnData = deletePaymentDetails;
break;
case 'setupDirectDebit':
returnData = setupDirectDebit;
break;
case 'confirmDirectDebit':
returnData = confirmDirectDebit;
break;
case 'cancelDirectDebit':
returnData = cancelDirectDebit;
break;
case 'getPlans':
returnData = getPlans;
break;
case 'changePlan':
returnData = changePlan;
break;
case 'paymentCharge':
returnData = paymentCharge;
break;
case 'getInvoices':
returnData = getInvoices;
break;
case 'getInvoice':
returnData = getInvoice;
break;
// saml
case 'ssoLogin':
returnData = ssoLogin;
break;
case 'ssoCallback':
returnData = ssoCallback;
break;
// signers
case 'createReminder':
returnData = createReminder;
break;
case 'getReminder':
returnData = getReminder;
break;
case 'destroyReminder':
returnData = destroyReminder;
break;
case 'signDocument':
returnData = signDocument;
break;
case 'getSignerEnvelopeFromSigners':
returnData = getSignerEnvelopeFromSigners;
break;
case 'updateSigner':
returnData = updateSigner;
break;
// Tags
case 'createTag':
returnData = createTag;
break;
case 'getTags':
returnData = getTags;
break;
case 'updateTag':
returnData = updateTag;
break;
case 'deleteTag':
returnData = deleteTag;
break;
case 'getResourcesByTagAndType':
returnData = getResourcesByTagAndType;
break;
// Templates
case 'createTemplate':
returnData = createTemplate;
break;
case 'getTemplates':
returnData = getTemplates;
break;
case 'generateEnvelopeRequest':
returnData = generateEnvelopeRequest;
break;
case 'updateTemplate':
returnData = updateTemplate;
break;
case 'retrieveTemplate':
returnData = retrieveTemplate;
break;
case 'deleteTemplate':
returnData = deleteTemplate;
break;
// uploads
case 'uploadFiles':
returnData = uploadFiles;
break;
case 'archiveFiles':
returnData = archiveFiles;
break;
case 'getFilesByType':
returnData = getFilesByType;
break;
case 'getFileByID':
returnData = getFileByID;
break;
case 'uploadCSVFile':
returnData = uploadCSVFile;
break;
// Users
case 'userLogin':
returnData = userLogin;
break;
case 'userLogout':
returnData = userLogout;
break;
case 'createContact':
returnData = createContact;
break;
case 'getContact':
returnData = getContact;
break;
case 'updateContact':
returnData = updateContact;
break;
case 'deleteContact':
returnData = deleteContact;
break;
case 'requestPasswordReset':
returnData = requestPasswordReset;
break;
case 'resetPassword':
returnData = resetPassword;
break;
case 'redirectToPasswordReset':
returnData = redirectToPasswordReset;
break;
case 'createSignature':
returnData = createSignature;
break;
case 'updateSignature':
returnData = updateSignature;
break;
case 'getSignature':
returnData = getSignature;
break;
case 'deleteSignature':
returnData = deleteSignature;
break;
case 'inviteUser':
returnData = inviteUser;
break;
case 'retrieveUsers':
returnData = retrieveUsers;
break;
case 'getUserByID':
returnData = getUserByID;
break;
case 'updateUser':
returnData = updateUser;
break;
case 'removeUser':
returnData = removeUser;
break;
case 'resendToken':
returnData = resendToken;
break;
case 'confirmUser':
returnData = confirmUser;
break;
case 'confirmInvite':
returnData = confirmInvite;
break;
// webhooks
case 'createWebhook':
returnData = createWebhook;
break;
case 'getWebhooks':
returnData = getWebhooks;
break;
case 'deleteWebhook':
returnData = deleteWebhook;
break;
// Default
default:
return undefined;
}
return returnData;
}
// ==============
// == Accounts ==
// ==============
// POST Create Account 'accounts'
let createAccount: any = {
method : "POST",
path : "accounts",
parameters: false
}
// GET Retrive Account 'accounts'
let retrieveAccount: any = {
method : "GET",
path : "accounts",
parameters: false
}
// PATCH Update Account 'accounts'
let updateAccount: any = {
method : "PATCH",
path : "accounts",
parameters: false
}
// DELETE Delete Account 'accounts'
let deleteAccount: any = {
method : "DELETE",
path : "accounts",
parameters: false
}
// GET Account With All Users 'accounts/includes/users'
let getAccountWithAllUsers: any = {
method: "GET",
path: "accounts/includes/users",
parameters: false
}
// GET Account Stats 'accounts/stats'
let getAccountStats: any = {
method : "GET",
path : "accounts/stats",
parameters: true
}
// GET Recent events 'accounts/events'
let getRecentEvents: any = {
method : "GET",
path : "accounts/events",
parameters: true
}
// GET List Extensions'accounts/{id}extensions'
let getExtensionsList: any = {
method : "GET",
path : "accounts/{id}/extensions",
parameters: true
}
// PATCH Enable Extension 'accounts/{id}/extensions'
let enableExtension: any = {
method : "PATCH",
path : "accounts/{id}extensions",
parameters: true
}
// DELETE Disable extension 'accounts/{id}/extensions'
let disableExtension: any = {
method : "DELETE",
path : "accounts/{id}extensions",
parameters: true
}
// ===============
// == Envelopes ==
// ===============
// POST Create envelope 'envelopes'
let createEnvelope: any = {
method : "POST",
path : "envelopes",
parameters: false
}
// GET Retrive envelopes 'envelopes'
let retrieveEnvelope: any = {
method : "GET",
path : "envelopes",
parameters: false
}
// DELETE Achive envelopes 'envelopes'
let archiveEnvelope: any = {
method : "DELETE",
path : "envelopes",
parameters: false
}
// PATCH Restore archived envelopes 'envelopes'
let restoreEnvelope: any = {
method : "PATCH",
path : "envelopes",
parameters: false
}
// PATCH Redirect to web add
let redirectToWebApp: any = {
method : "POST",
path : "envelopes/redirect",
parameters: false
}
// GET Retrive signed envelopes 'envelopes/signed'
let getSignedEnvelopes: any = {
method : "GET",
path : "envelopes/signed",
parameters: false
}
// GET Retrive completed envelopes 'envelopes/completed'
let getCompletedEnvelopes: any = {
method : "GET",
path : "envelopes/completed",
parameters: false
}
// GET Retrive pending envelopes 'envelopes/pending'
let getPendingEnvelopes: any = {
method : "GET",
path : "envelopes/pending",
parameters: false
}
// GET Retrive declined envelopes 'envelopes/declined'
let getDeclinedEnvelopes: any = {
method : "GET",
path : "envelopes/declined",
parameters: false
}
// GET Retrive achived envelopes 'envelopes/archived'
let getArchivedEnvelopes: any = {
method : "GET",
path : "envelopes/archived",
parameters: false
}
// GET Retrive envelope 'envelopes/{id}'
let getEnvelope: any = {
method : "GET",
path : "envelopes/{id}",
parameters: true
}
// DELETE Permanently delete envelope 'envelopes/{id}'
let permanentlyDeleteEnvelope: any = {
method : "DELETE",
path : "envelopes/{id}",
parameters: true
}
// GET Retrive signer envelope 'envelopes/{id}/signer/{signer_id}'
let getSignerEnvelope: any = {
method : "GET",
path : "envelopes/{id}/signer/{signer_id}",
parameters: true
}
// GET Retrive Audit Trail 'envelopes/{id}/audits'
let getAuditTrail: any = {
method : "GET",
path : "envelopes/{id}/audits",
parameters: true
}
// GET Retrive attachments 'envelopes/{id}/attachments'
let getAttachments: any = {
method : "GET",
path : "envelopes/{id}/attachments",
parameters: true
}
// ===========
// == OAuth ==
// ===========
// POST Create an OAuth application 'oauth/applications'
let createOauthApp: any = {
method : "POST",
path : "oauth/applications",
parameters: false
}
// GET Get oauth apps 'oauth/applications'
let getOauthApps: any = {
method : "GET",
path : "oauth/applications",
parameters: false
}
// GET Show oauth app 'oauth/applications/{id}'
let getOauthApp: any = {
method : "GET",
path : "oauth/applications/{id}",
parameters: true
}
// DELETE Delete oauth app 'oauth/applications/{id}'
let deleteOauthApp: any = {
method : "DELETE",
path : "oauth/applications/{id}",
parameters: true
}
// POST Create Authorization code 'oauth/authorize'
let createAuthCode: any = {
method : "POST",
path : "oauth/authorize",
parameters: false
}
// POST Retrieve Access token 'oauth/token'
let retrieveAccessToken: any = {
method : "POST",
path : "oauth/token",
parameters: false
}
// POST Revoke Access token 'oauth/revoke'
let revokeAccessToken: any = {
method : "POST",
path : "oauth/revoke",
parameters: false
}
// GET Get token info 'oauth/token/info'
let getTokenInfo: any = {
method : "GET",
path : "oauth/token/info",
parameters: false
}
// ==============
// == Payments ==
// ==============
// POST add payment details 'payments/cards'
let addPaymentDetails: any = {
method : "POST",
path : "payments/cards",
parameters: false
}
// DELETE delete payment details 'payments/cards'
let deletePaymentDetails: any = {
method : "DELETE",
path : "payments/cards",
parameters: false
}
// POST set up directs debit 'payments/direct_debits'
let setupDirectDebit: any = {
method : "POST",
path : "payments/direct_debits",
parameters: false
}
// PATCH confirms direct debit 'payments/direct_debits'
let confirmDirectDebit: any = {
method : "PATCH",
path : "payments/direct_debits",
parameters: false
}
// DELETE cancel direct debit 'payments/direct_debits'
let cancelDirectDebit: any = {
method : "DELETE",
path : "payments/direct_debits",
parameters: false
}
// GET get plans 'payments/plans'
let getPlans: any = {
method : "GET",
path : "payments/plans",
parameters: false
}
// PATCH change plan 'payments/plans'
let changePlan: any = {
method : "GET",
path : "payments/plans",
parameters: false
}
// POST payment charge 'payments'
let paymentCharge: any = {
method : "POST",
path : "payments",
parameters: false
}
// GET get invoices 'payments'
let getInvoices: any = {
method : "GET",
path : "payments",
parameters: false
}
// GET get invoice 'payments/{id}'
let getInvoice: any = {
method : "GET",
path : "payments/{id}",
parameters: true
}
// ==========
// == SAML ==
// ==========
// GET SSO organisation Login 'saml/auth/login'
let ssoLogin: any = {
method : "GET",
path : "saml/auth/login",
parameters: false
}
// POST SSO organisation callback 'saml/auth/callback'
let ssoCallback: any = {
method : "POST",
path : "saml/auth/callback",
parameters: false
}
// =============
// == Signers ==
// =============
// POST create reminder 'signers/{id}/reminders'
let createReminder: any = {
method : "POST",
path : "signers/{id}/reminders",
parameters: true
}
// GET get reminder 'signers/{id}/reminders'
let getReminder: any = {
method : "GET",
path : "signers/{id}/reminders",
parameters: true
}
// DELETE destroy reminder 'signers/{id}/reminders'
let destroyReminder: any = {
method : "DELETE",
path : "signers/{id}/reminders",
parameters: true
}
// POST Sign Document 'signers/{id}/doumnets/{document_id}'
let signDocument: any = {
method : "POST",
path : "signers/{id}/doumnets/{document_id}",
parameters: true
}
// GET get signer envelope 'signers/{id}'
let getSignerEnvelopeFromSigners: any = {
method : "GET",
path : "signers/{id}",
parameters: true
}
// PATCH update signer 'signers/{id}'
let updateSigner: any = {
method : "GET",
path : "signers/{id}",
parameters: true
}
// ==========
// == Tags ==
// ==========
// POST Create tag 'tags'
let createTag: any = {
method : "POST",
path : "tags",
parameters: false
}
// GET get tags 'tags'
let getTags: any = {
method : "GET",
path : "tags",
parameters: false
}
// PATCH Update tag 'tags/{id}'
let updateTag: any = {
method : "PATCH",
path : "tags/{id}",
parameters: true
}
// DELETE delete tag 'tags/{id}'
let deleteTag: any = {
method : "DELETE",
path : "tags/{id}",
parameters: true
}
let getResourcesByTagAndType: any = {
method : "GET",
path : "tags/{id}/{resource_type}",
parameters: true
}
// ===============
// == Templates ==
// ===============
// POST create template 'templates'
let createTemplate: any = {
method : "POST",
path : "templates",
parameters: false
}
// GET get templates 'templates
let getTemplates: any = {
method : "GET",
path : "templates",
parameters: false
}
// POST generate envelope template 'templates/{id}'
let generateEnvelopeRequest: any = {
method : "POST",
path : "templates/{id}",
parameters: true
}
// PATCH update template 'templates/{id}'
let updateTemplate: any = {
method : "PATCH",
path : "templates/{id}",
parameters: true
}
// GET retrieve template 'templates/{id}'
let retrieveTemplate: any = {
method : "POST",
path : "templates/{id}",
parameters: true
}
// DELETE delete template 'templates/{id}'
let deleteTemplate: any = {
method : "DELETE",
path : "templates/{id}",
parameters: true
}
// =============
// == Uploads ==
// =============
// POST upload files 'uploads'
let uploadFiles: any = {
method : "POST",
path : "uploads",
parameters: false
}
// DELETE archive files 'uploads'
let archiveFiles: any = {
method : "DELETE",
path : "uploads",
parameters: false
}
// GET get files 'uploads/list/{type}'
let getFilesByType: any = {
method : "GET",
path : "uploads/list/{type}",
parameters: true
}
// GET upload file by id 'uploads/{id}'
let getFileByID: any = {
method : "GET",
path : "uploads/{id}",
parameters: true
}
// POST upload csv file 'uploads/csv'
let uploadCSVFile: any = {
method : "POST",
path : "uploads/csv",
parameters: false
}
// ===========
// == Users ==
// ===========
// POST login 'users/login'
let userLogin: any = {
method : "POST",
path : "users/login",
parameters: false
}
// DELETE logout 'users/logout'
let userLogout: any = {
method : "DELETE",
path : "users/logout",
parameters: false
}
// POST create contact 'users/contacts'
let createContact: any = {
method : "POST",
path : "users/contacts",
parameters: false
}
// GET get contacts 'users/contacts'
let getContact: any = {
method : "GET",
path : "users/contacts",
parameters: false
}
// PATCH update contact 'users/contacts/{id}'
let updateContact: any = {
method : "PATCH",
path : "users/contacts/{id}",
parameters: true
}
// DELETE delete contact 'users/contacts/{id}'
let deleteContact: any = {
method : "DELETE",
path : "users/contacts/{id}",
parameters: true
}
// POST request reset password 'users/passwords'
let requestPasswordReset: any = {
method : "POST",
path : "users/passwords",
parameters: false
}
// PATCH reset password 'users/passwords/update'
let resetPassword: any = {
method : "PATCH",
path : "users/passwords/update",
parameters: false
}
// GET redirect to password edit page 'users/passwords/edit'
let redirectToPasswordReset: any = {
method : "POST",
path : "users/passwords/edit",
parameters: false
}
// POST create signature 'users/signatures'
let createSignature: any = {
method : "POST",
path : "users/signatures",
parameters: false
}
// PATCH update signature 'users/signatures'
let updateSignature: any = {
method : "PATCH",
path : "users/signatures",
parameters: false
}
// GET get signature 'users/signatures'
let getSignature: any = {
method : "GET",
path : "users/signatures",
parameters: false
}
// DELETE delete signature 'users/signatures'
let deleteSignature: any = {
method : "DELETE",
path : "users/signatures",
parameters: false
}
// POST invite user 'users'
let inviteUser: any = {
method : "POST",
path : "users",
parameters: false
}
// GET retrieve users 'users
let retrieveUsers: any = {
method : "GET",
path : "users",
parameters: false
}
// GET get user 'users/{id}'
let getUserByID: any = {
method : "GET",
path : "users/{id}",
parameters: true
}
// PATCH updates a user 'users/{id}'
let updateUser: any = {
method : "PATCH",
path : "users/{id}",
parameters: true
}
// DELETE remove user 'users/{id}'
let removeUser: any = {
method : "DELETE",
path : "users/{id}",
parameters: true
}
// POST resend token 'users/confirms'
let resendToken: any = {
method : "POST",
path : "users/confirms",
parameters: false
}
// GET confirms a user 'users/{id}/confirms/{token}'
let confirmUser: any = {
method : "GET",
path : "users/{id}/confirms/{token}",
parameters: true
}
// PATCH confirms an invite 'users/{id}/invites/{token}'
let confirmInvite: any = {
method : "PATCH",
path : "users/{id}/confirms/{token}",
parameters: true
}
// ===============
// == Web Hooks ==
// ===============
// POST Create webhok 'webhooks'
let createWebhook: any = {
method : "POST",
path : "webhooks",
parameters: false
}
// GET get webhok 'webhooks'
let getWebhooks: any = {
method : "GET",
path : "webhooks",
parameters: false
}
// DELETE delete webho0k 'webhooks/{id}'
let deleteWebhook: any = {
method : "DELETE",
path : "webhooks/{id}",
parameters: true
}