Skip to content

Commit 7a6a543

Browse files
authored
Merge pull request #399 from OpenSignLabs/api-v1-beta
2 parents 35d20bd + edda209 commit 7a6a543

File tree

12 files changed

+147
-60
lines changed

12 files changed

+147
-60
lines changed

apps/OpenSign/src/json/FormJson.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ export const formJson = {
88
Cls: documentCls
99
},
1010

11-
//json form for request signature
11+
//json form for request signatures
1212
"8mZzFxbG1z": {
13-
title: "Request Signature",
13+
title: "Request Signatures",
1414
msgVar: "Document",
1515
redirectRoute: "placeHolderSign",
1616
Cls: documentCls,

apps/OpenSign/src/routes/Form.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ const Forms = (props) => {
157157
object.set("Name", formData?.Name);
158158
object.set("Description", formData?.Description);
159159
object.set("Note", formData?.Note);
160-
if (props.title === "Request Signature") {
160+
if (props.title === "Request Signatures") {
161161
object.set(
162162
"TimeToCompleteDays",
163163
parseInt(formData?.TimeToCompleteDays)
@@ -352,7 +352,7 @@ const Forms = (props) => {
352352
</div>
353353
<SelectFolder onSuccess={handleFolder} folderCls={props.Cls} />
354354

355-
{props.title === "Request Signature" && (
355+
{props.title === "Request Signatures" && (
356356
<div className="text-xs mt-2">
357357
<label className="block">
358358
Time To Complete (Days)

apps/OpenSignServer/cloud/customRoute/v1/apiV1.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import getDocument from './routes/getDocument.js';
99
import getContact from './routes/getContact.js';
1010
import deleteContact from './routes/deleteContact.js';
1111
import getContactList from './routes/getContactList.js';
12-
import createDocument from './routes/createDocument.js';
12+
import draftDocument from './routes/draftDocument.js';
1313
import createTemplate from './routes/createTemplate.js';
1414
import getTemplate from './routes/getTemplate.js';
1515
import deletedTemplate from './routes/deleteTemplate.js';
@@ -56,7 +56,7 @@ app.post('/createdocumentwithbinary', upload.array('file', 1), createDocumentwit
5656
app.post('/createdocument', createDocumentwithCoordinate);
5757

5858
// create Document with base64 without placeholder
59-
app.post('/draftdocument', createDocument);
59+
app.post('/draftdocument', draftDocument);
6060

6161
// create Document with templateId
6262
app.post('/createdocument/:template_id', createDocumentWithTemplate);

apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,12 @@ export default async function createDocumentWithTemplate(request, response) {
201201
if (send_email === false) {
202202
console.log("don't send mail");
203203
} else {
204-
for (let i = 0; i < contact.length; i++) {
205-
if (sendInOrder) {
206-
contact.splice(1);
207-
}
204+
let contactMail = contact;
205+
if (sendInOrder) {
206+
contactMail = contact.slice();
207+
contactMail.splice(1);
208+
}
209+
for (let i = 0; i < contactMail.length; i++) {
208210
try {
209211
const imgPng = 'https://qikinnovation.ams3.digitaloceanspaces.com/logo.png';
210212
let url = `${process.env.SERVER_URL}/functions/sendmailv3/`;
@@ -214,10 +216,10 @@ export default async function createDocumentWithTemplate(request, response) {
214216
'X-Parse-Master-Key': process.env.MASTER_KEY,
215217
};
216218

217-
const objectId = contact[i].contactPtr.objectId;
219+
const objectId = contactMail[i].contactPtr.objectId;
218220

219221
const hostUrl = baseUrl.origin + '/loadmf/signmicroapp';
220-
let signPdf = `${hostUrl}/login/${res.id}/${contact[i].email}/${objectId}/${serverParams}`;
222+
let signPdf = `${hostUrl}/login/${res.id}/${contactMail[i].email}/${objectId}/${serverParams}`;
221223
const openSignUrl = 'https://www.opensignlabs.com/contact-us';
222224
const orgName = template.ExtUserPtr.Company ? template.ExtUserPtr.Company : '';
223225
const themeBGcolor = '#47a3ad';
@@ -250,9 +252,9 @@ export default async function createDocumentWithTemplate(request, response) {
250252
sender_name: template.ExtUserPtr.Name,
251253
sender_mail: template.ExtUserPtr.Email,
252254
sender_phone: template.ExtUserPtr.Phone,
253-
receiver_name: contact[i].name,
254-
receiver_email: contact[i].email,
255-
receiver_phone: contact[i].phone,
255+
receiver_name: contactMail[i].name,
256+
receiver_email: contactMail[i].email,
257+
receiver_phone: contactMail[i].phone,
256258
expiry_date: localExpireDate,
257259
company_name: orgName,
258260
signing_url: signPdf,
@@ -278,7 +280,7 @@ export default async function createDocumentWithTemplate(request, response) {
278280
const subject = replaceVar.subject;
279281
const html = replaceVar.body;
280282
let params = {
281-
recipient: contact[i].email,
283+
recipient: contactMail[i].email,
282284
subject: subject,
283285
from: sender,
284286
html: html,

apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -252,10 +252,12 @@ export default async function createDocumentwithCoordinate(request, response) {
252252
if (send_email === false) {
253253
console.log("don't send mail");
254254
} else {
255+
let contactMail = contact;
255256
if (sendInOrder) {
256-
contact.splice(1);
257+
contactMail = contact.slice();
258+
contactMail.splice(1);
257259
}
258-
for (let i = 0; i < contact.length; i++) {
260+
for (let i = 0; i < contactMail.length; i++) {
259261
try {
260262
const imgPng = 'https://qikinnovation.ams3.digitaloceanspaces.com/logo.png';
261263
let url = `${process.env.SERVER_URL}/functions/sendmailv3/`;
@@ -265,10 +267,10 @@ export default async function createDocumentwithCoordinate(request, response) {
265267
'X-Parse-Master-Key': process.env.MASTER_KEY,
266268
};
267269

268-
const objectId = contact[i].contactPtr.objectId;
270+
const objectId = contactMail[i].contactPtr.objectId;
269271

270272
const hostUrl = baseUrl.origin + '/loadmf/signmicroapp';
271-
let signPdf = `${hostUrl}/login/${res.id}/${contact[i].email}/${objectId}/${serverParams}`;
273+
let signPdf = `${hostUrl}/login/${res.id}/${contactMail[i].email}/${objectId}/${serverParams}`;
272274
const openSignUrl = 'https://www.opensignlabs.com/contact-us';
273275
const orgName = parseExtUser.Company ? parseExtUser.Company : '';
274276
const themeBGcolor = '#47a3ad';
@@ -300,9 +302,9 @@ export default async function createDocumentwithCoordinate(request, response) {
300302
sender_name: parseExtUser.Name,
301303
sender_mail: parseExtUser.Email,
302304
sender_phone: parseExtUser.Phone,
303-
receiver_name: contact[i].name,
304-
receiver_email: contact[i].email,
305-
receiver_phone: contact[i].phone,
305+
receiver_name: contactMail[i].name,
306+
receiver_email: contactMail[i].email,
307+
receiver_phone: contactMail[i].phone,
306308
expiry_date: localExpireDate,
307309
company_name: orgName,
308310
signing_url: signPdf,
@@ -328,7 +330,7 @@ export default async function createDocumentwithCoordinate(request, response) {
328330
const html = replaceVar.body;
329331

330332
let params = {
331-
recipient: contact[i].email,
333+
recipient: contactMail[i].email,
332334
subject: subject,
333335
from: sender,
334336
html: html,

apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ export default async function createTemplate(request, response) {
123123
}
124124
return response.json({
125125
objectId: res.id,
126-
url: baseUrl.p + '/load/signmicroapp/template/' + res.id,
126+
url: baseUrl.origin + '/load/signmicroapp/template/' + res.id,
127127
});
128128
} else {
129129
return response.status(405).json({ error: 'Invalid API Token!' });

apps/OpenSignServer/cloud/customRoute/v1/routes/createDocument.js renamed to apps/OpenSignServer/cloud/customRoute/v1/routes/draftDocument.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import axios from 'axios';
22
import { customAPIurl } from '../../../../Utils.js';
33

44
// const randomId = () => Math.floor(1000 + Math.random() * 9000);
5-
export default async function createDocument(request, response) {
5+
export default async function draftDocument(request, response) {
66
const name = request.body.title;
77
const note = request.body.note;
88
const description = request.body.description;

apps/OpenSignServer/cloud/customRoute/v1/routes/getDocument.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export default async function getDocument(request, response) {
2323
Document.include('Signers');
2424
Document.include('Folder');
2525
Document.include('ExtUserPtr');
26+
Document.include('Placeholders.signerPtr');
2627
const res = await Document.first({ useMasterKey: true });
2728
if (res) {
2829
const document = JSON.parse(JSON.stringify(res));
@@ -41,8 +42,25 @@ export default async function getDocument(request, response) {
4142
file: document?.SignedUrl || document.URL,
4243
owner: document?.ExtUserPtr?.Name,
4344
signers:
45+
document?.Placeholders?.map(y => ({
46+
role: y.Role,
47+
name: y?.signerPtr?.Name || '',
48+
email: y?.signerPtr?.Email || '',
49+
phone: y?.signerPtr?.Phone || '',
50+
widgets: y.placeHolder?.flatMap(x =>
51+
x?.pos.map(w => ({
52+
type: w?.type ? w.type : w.isStamp ? 'stamp' : 'signature',
53+
x: w.xPosition,
54+
y: w.yPosition,
55+
w: w?.Width || 150,
56+
h: w?.Height || 60,
57+
page: x?.pageNumber,
58+
}))
59+
),
60+
})) ||
4461
document?.Signers?.map(y => ({ name: y?.Name, email: y?.Email, phone: y?.Phone })) ||
4562
[],
63+
sendInOrder: document?.SendinOrder || false,
4664
createdAt: document.createdAt,
4765
updatedAt: document.updatedAt,
4866
});

apps/OpenSignServer/cloud/customRoute/v1/routes/getDocumentList.js

Lines changed: 52 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -61,38 +61,70 @@ export default async function getDocumentList(request, response) {
6161
'X-Parse-Application-Id': appId,
6262
'X-Parse-Master-Key': process.env.MASTER_KEY,
6363
};
64-
const url = `${serverUrl}/classes/${clsName}?where=${strParams}&keys=${strKeys}&order=${orderBy}&skip=${skip}&limit=${limit}&include=AuditTrail.UserPtr`;
65-
const res = await axios.get(url, { headers: headers });
66-
if (res.data && res.data.results.length > 0) {
64+
const url = `${serverUrl}/classes/${clsName}?where=${strParams}&keys=${strKeys},Placeholders&order=${orderBy}&skip=${skip}&limit=${limit}&include=AuditTrail.UserPtr,Placeholders.signerPtr`;
65+
try {
66+
const res = await axios.get(url, { headers: headers });
67+
if (res.data && res.data.results.length > 0) {
68+
if (request.posthog) {
69+
request.posthog?.capture({
70+
distinctId: parseUser.userId.email,
71+
event: 'api_get_document_list_by_status',
72+
properties: { response_code: 200, doc_type: docType },
73+
});
74+
}
75+
const updateRes = res.data.results.map(x => ({
76+
objectId: x.objectId,
77+
title: x.Name,
78+
note: x.Note || '',
79+
folder: { objectId: x?.Folder?.objectId, name: x?.Folder?.Name } || '',
80+
file: x?.SignedUrl || x.URL,
81+
owner: x?.ExtUserPtr?.Name,
82+
signers:
83+
x?.Placeholders?.map(y => ({
84+
role: y.Role,
85+
name: y?.signerPtr?.Name || '',
86+
email: y?.signerPtr?.Email || '',
87+
phone: y?.signerPtr?.Phone || '',
88+
widgets: y.placeHolder?.flatMap(x =>
89+
x?.pos.map(w => ({
90+
type: w?.type ? w.type : w.isStamp ? 'stamp' : 'signature',
91+
x: w.xPosition,
92+
y: w.yPosition,
93+
w: w?.Width || 150,
94+
h: w?.Height || 60,
95+
page: x?.pageNumber,
96+
}))
97+
),
98+
})) ||
99+
x?.Signers?.map(y => ({ name: y?.Name, email: y?.Email, phone: y?.Phone })) ||
100+
[],
101+
sendInOrder: x?.SendinOrder || false,
102+
createdAt: x.createdAt,
103+
updatedAt: x.updatedAt,
104+
}));
105+
return response.json({ result: updateRes });
106+
} else {
107+
return response.json({ result: [] });
108+
}
109+
} catch (err) {
110+
console.log('err in getdocument list', err);
67111
if (request.posthog) {
68112
request.posthog?.capture({
69113
distinctId: parseUser.userId.email,
70114
event: 'api_get_document_list_by_status',
71-
properties: { response_code: 200 },
115+
properties: { response_code: 400, doc_type: docType },
72116
});
73117
}
74-
const updateRes = res.data.results.map(x => ({
75-
objectId: x.objectId,
76-
title: x.Name,
77-
note: x.Note || '',
78-
folder: { objectId: x?.Folder?.objectId, name: x?.Folder?.Name } || '',
79-
file: x?.SignedUrl || x.URL,
80-
owner: x?.ExtUserPtr?.Name,
81-
signers:
82-
x?.Signers?.map(y => ({ name: y?.Name, email: y?.Email, phone: y?.Phone })) || [],
83-
createdAt: x.createdAt,
84-
updatedAt: x.updatedAt,
85-
}));
86-
return response.json({ result: updateRes });
87-
} else {
88-
return response.json({ result: [] });
118+
return response
119+
.status(400)
120+
.json({ error: 'Something went wrong, please try again later!' });
89121
}
90122
} else {
91123
if (request.posthog) {
92124
request.posthog?.capture({
93125
distinctId: parseUser.userId.email,
94126
event: 'api_get_document_list_by_status',
95-
properties: { response_code: 404 },
127+
properties: { response_code: 404, doc_type: docType },
96128
});
97129
}
98130
return response.status(404).json({ error: 'Report not available!' });

apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplate.js

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export default async function getTemplate(request, response) {
2424
Template.include('Signers');
2525
Template.include('Folder');
2626
Template.include('ExtUserPtr');
27+
Template.include('Placeholders.signerPtr');
2728
const res = await Template.first({ useMasterKey: true });
2829
if (res) {
2930
const template = JSON.parse(JSON.stringify(res));
@@ -43,8 +44,23 @@ export default async function getTemplate(request, response) {
4344
file: template?.SignedUrl || template?.URL,
4445
owner: template?.ExtUserPtr?.Name,
4546
signers:
46-
template?.Signers?.map(y => ({ name: y?.Name, email: y?.Email, phone: y?.Phone })) ||
47-
[],
47+
template?.Placeholders?.map(y => ({
48+
role: y.Role,
49+
name: y?.signerPtr?.Name || '',
50+
email: y?.signerPtr?.Email || '',
51+
phone: y?.signerPtr?.Phone || '',
52+
widgets: y.placeHolder?.flatMap(x =>
53+
x?.pos.map(w => ({
54+
type: w?.type ? w.type : w.isStamp ? 'stamp' : 'signature',
55+
x: w.xPosition,
56+
y: w.yPosition,
57+
w: w?.Width || 150,
58+
h: w?.Height || 60,
59+
page: x?.pageNumber,
60+
}))
61+
),
62+
})) || [],
63+
sendInOrder: template?.SendinOrder || false,
4864
createdAt: template.createdAt,
4965
updatedAt: template.updatedAt,
5066
});

apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplateList.js

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ export default async function getTemplatetList(request, response) {
4242
'Signers.Name',
4343
'Signers.Email',
4444
'Signers.Phone',
45+
'Placeholders',
4546
];
4647
const orderBy = '-updatedAt';
4748
const strParams = JSON.stringify(params);
@@ -51,7 +52,7 @@ export default async function getTemplatetList(request, response) {
5152
'X-Parse-Application-Id': appId,
5253
'X-Parse-Master-Key': process.env.MASTER_KEY,
5354
};
54-
const url = `${serverUrl}/classes/${clsName}?where=${strParams}&keys=${strKeys}&order=${orderBy}&skip=${skip}&limit=${limit}&include=AuditTrail.UserPtr`;
55+
const url = `${serverUrl}/classes/${clsName}?where=${strParams}&keys=${strKeys}&order=${orderBy}&skip=${skip}&limit=${limit}&include=AuditTrail.UserPtr,Placeholders.signerPtr`;
5556
const res = await axios.get(url, { headers: headers });
5657
if (res.data && res.data.results.length > 0) {
5758
if (request.posthog) {
@@ -61,17 +62,33 @@ export default async function getTemplatetList(request, response) {
6162
properties: { response_code: 200 },
6263
});
6364
}
64-
const updateRes = res.data.results.map(x => ({
65-
objectId: x.objectId,
66-
title: x.Name,
67-
note: x.Note || '',
68-
folder: { objectId: x?.Folder?.objectId, name: x?.Folder?.Name } || '',
69-
file: x?.SignedUrl || x.URL,
70-
owner: x?.ExtUserPtr?.Name,
65+
const updateRes = res.data.results.map(template => ({
66+
objectId: template.objectId,
67+
title: template.Name,
68+
note: template.Note || '',
69+
folder: { objectId: template?.Folder?.objectId, name: template?.Folder?.Name } || '',
70+
file: template?.SignedUrl || template.URL,
71+
owner: template?.ExtUserPtr?.Name,
7172
signers:
72-
x?.Signers?.map(y => ({ name: y?.Name, email: y?.Email, phone: y?.Phone })) || [],
73-
createdAt: x.createdAt,
74-
updatedAt: x.updatedAt,
73+
template?.Placeholders?.map(y => ({
74+
role: y.Role,
75+
name: y?.signerPtr?.Name || '',
76+
email: y?.signerPtr?.Email || '',
77+
phone: y?.signerPtr?.Phone || '',
78+
widgets: y.placeHolder?.flatMap(x =>
79+
x?.pos.map(w => ({
80+
type: w?.type ? w.type : w.isStamp ? 'stamp' : 'signature',
81+
x: w.xPosition,
82+
y: w.yPosition,
83+
w: w?.Width || 150,
84+
h: w?.Height || 60,
85+
page: x?.pageNumber,
86+
}))
87+
),
88+
})) || [],
89+
sendInOrder: template?.SendinOrder || false,
90+
createdAt: template.createdAt,
91+
updatedAt: template.updatedAt,
7592
}));
7693

7794
return response.json({ result: updateRes });
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Email Address Verification
1+
OpenSign™ Email Address Verification

0 commit comments

Comments
 (0)