Skip to content

Commit 5c489b9

Browse files
fix(sign-submit): prefer envelope signer with top-level fallback elements
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
1 parent c792d5c commit 5c489b9

1 file changed

Lines changed: 39 additions & 15 deletions

File tree

src/services/signSubmit.ts

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,13 @@ export type EnvelopeSigner = Omit<Partial<Pick<SignerDetailRecord, 'me' | 'signR
4949
sign_request_uuid?: string | null
5050
}
5151

52+
type EnvelopeOwnSigner = EnvelopeSigner & {
53+
me: true
54+
signRequestId: number
55+
sign_request_uuid: string
56+
level: 'top' | 'file'
57+
}
58+
5259
export type EnvelopeFileForSubmission = {
5360
signers?: EnvelopeSigner[]
5461
}
@@ -142,7 +149,10 @@ export function getEnvelopeSubmitRequests({
142149
continue
143150
}
144151

145-
const signerElements = elements.filter((element) => element.signRequestId === signer.signRequestId)
152+
const matchingElements = elements.filter((element) => element.signRequestId === signer.signRequestId)
153+
const signerElements = signer.level === 'top' && matchingElements.length === 0
154+
? elements
155+
: matchingElements
146156
requests.push({
147157
signRequestUuid: signer.sign_request_uuid,
148158
payload: buildSubmitSignaturePayload({
@@ -161,15 +171,12 @@ function getEnvelopeOwnSigners(document: SignDocumentForSubmission): Array<Envel
161171
me: true
162172
signRequestId: number
163173
sign_request_uuid: string
174+
level: 'top' | 'file'
164175
}> {
165-
const ownSigners: Array<EnvelopeSigner & {
166-
me: true
167-
signRequestId: number
168-
sign_request_uuid: string
169-
}> = []
176+
const ownSigners: EnvelopeOwnSigner[] = []
170177
const seen = new Set<string>()
171178

172-
const addSigner = (signer: EnvelopeSigner) => {
179+
const addSigner = (signer: EnvelopeSigner, level: 'top' | 'file') => {
173180
if (!isOwnEnvelopeSigner(signer)) {
174181
return
175182
}
@@ -179,30 +186,47 @@ function getEnvelopeOwnSigners(document: SignDocumentForSubmission): Array<Envel
179186
}
180187

181188
seen.add(signer.sign_request_uuid)
182-
ownSigners.push(signer)
189+
ownSigners.push({
190+
...signer,
191+
level,
192+
})
193+
}
194+
195+
const topOwnSigners: EnvelopeSigner[] = []
196+
for (const signer of document.signers ?? []) {
197+
if (isOwnEnvelopeSigner(signer)) {
198+
topOwnSigners.push(signer)
199+
}
183200
}
184201

185-
const fileOwnSigners: EnvelopeSigner[] = []
202+
if (topOwnSigners.length > 0) {
203+
for (const signer of topOwnSigners) {
204+
addSigner(signer, 'top')
205+
}
206+
207+
return ownSigners
208+
}
209+
210+
const fileOwnSigners: EnvelopeOwnSigner[] = []
186211
for (const file of document.files ?? []) {
187212
for (const signer of file.signers ?? []) {
188213
if (isOwnEnvelopeSigner(signer)) {
189-
fileOwnSigners.push(signer)
214+
fileOwnSigners.push({
215+
...signer,
216+
level: 'file',
217+
})
190218
}
191219
}
192220
}
193221

194222
if (fileOwnSigners.length > 0) {
195223
for (const signer of fileOwnSigners) {
196-
addSigner(signer)
224+
addSigner(signer, 'file')
197225
}
198226

199227
return ownSigners
200228
}
201229

202-
for (const signer of document.signers ?? []) {
203-
addSigner(signer)
204-
}
205-
206230
return ownSigners
207231
}
208232

0 commit comments

Comments
 (0)