@superdurable/connector-docusign 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +22 -2
- package/dex-connector.json +384 -0
- package/dist/chunk-PSJGBNG4.js +424 -0
- package/dist/connection-BFvLyRgn.d.ts +363 -0
- package/dist/index.d.ts +553 -0
- package/dist/index.js +1543 -0
- package/dist/mock.d.ts +149 -0
- package/dist/mock.js +360 -0
- package/package.json +63 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Super Durable
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,23 @@
|
|
|
1
|
-
#
|
|
1
|
+
# DocuSign TypeScript connector
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Install `@superdurable/connector-docusign@0.2.0` with `@superdurable/connectors-sdk@0.11.0` and `@superdurable/dex` 1.28 or newer. It provides five eSignature operations for Dex Flows: `createEnvelopeFromTemplate`, `getEnvelope`, `listEnvelopeRecipients`, `voidEnvelope`, and `downloadCombinedDocument`, and from 0.2.0 the `envelopeEventReceived` Connect Trigger. The package uses the manifest's production and developer OAuth methods, with automatic refresh through the generated credential wiring.
|
|
4
|
+
|
|
5
|
+
The package exports generated operation-specific Step factories, typed models, mock cases, `DocuSignClient`, and `newProjectConnection`. Applications configure a named DocuSign connection in Dex Web using the [connector authorization guide](../README.md). Never put access tokens, refresh tokens, client secrets, Connect HMAC keys, or signed PDFs in Flow inputs, Attributes, Results, or logs.
|
|
6
|
+
|
|
7
|
+
The [envelope status example](examples/envelope-status/README.md) is a runnable Flow, Worker, and Client using the static `docusign-envelope-reader` connection. Its integration test runs through a real Dex Worker and Client with a local DocuSign stand-in. Provider replay scenarios under [`conformance/connectors/docusign`](../../../conformance/connectors/docusign/) check Go and TypeScript request and classification parity. Real DocuSign OAuth authorization, regional account lookup, eSignature requests, and Connect configuration require verification in Dex Web with a user-controlled provider account; they were not exercised by these local tests.
|
|
8
|
+
|
|
9
|
+
The optional `CombinedDocumentStore` supplied to `DocuSignClient` stores a downloaded PDF outside Dex and returns a safe location of at most 1024 bytes. Without a store, `downloadCombinedDocument` returns only its byte count and SHA-256 digest. A store must consume the whole content atomically and be safe to call again after a retry.
|
|
10
|
+
|
|
11
|
+
From this package directory, run `npm ci`, `npm run check`, and `npm run test:integration` with `DEX_FLOW_SERVICE_ADDRESS` pointing to a running `dexcli dev` server.
|
|
12
|
+
|
|
13
|
+
## Triggers
|
|
14
|
+
|
|
15
|
+
From 0.2.0, `envelopeEventReceived` receives HMAC-verified DocuSign Connect `envelope-completed`, `envelope-declined`, and `envelope-voided` events in the JSON SIM format, at parity with the Go connector. The runnable [envelope outcome example](examples/envelope-outcome/README.md) sends an envelope tagged with a hidden `dexSigningRequestId` custom field and completes when Connect reports its outcome through a typed RPC.
|
|
16
|
+
|
|
17
|
+
- `newProjectEnvelopeEventReceivedEndpointRunner(project, connectionName, routes)` opens the connection and each route's binding from the project configuration and wraps every target in the binding's durable project inbox, so an event is stored before Connect receives `200`. Mount `runner.serveHTTP` at the Connect configuration's URL to Publish and run `runner.run(context)` for the life of the process; it replays pending inbox events first. Wire targets with `newDexRPCTriggerTarget` or `newDexFlowTriggerTarget` from `@superdurable/connectors-sdk`. `runner.runningSourceCount()` serves a readiness check.
|
|
18
|
+
- The endpoint accepts only `POST` up to `connectMaxBodyBytes` (`413` above it, before the signature is checked), and accepts any `X-DocuSign-Signature-<n>` header equal to the base64 HMAC-SHA256 of the raw body under `connect_hmac_key`, with `"` removed from the key, in constant time. A bad signature or a body that is not a JSON SIM envelope event with GUID identities answers `400`. A connection without a key, a moment with no running binding, and a failed inbox write answer `503`, so Connect retries. Another Connect event, such as `recipient-completed`, and an outcome the binding's `events` filter excludes are acknowledged with `200` and not recorded.
|
|
19
|
+
- The event ID is the lowercase envelope ID and the event name, such as `93be49ab-0000-0000-0000-f752070d71ec:envelope-completed`, so a Connect retry or a second configuration delivering the same outcome keeps one ID. `occurredAt` is Connect's `generatedDateTime`, or the receipt time when it is blank or unparsable. The payload carries the lowercase account ID, the envelope summary's lowercase `status`, `voidedReason`, and named text `customFields` when the configuration includes envelope data; `envelopeEventCustomFieldValue` reads one field.
|
|
20
|
+
- The binding configuration is `{"events": [...]}` with distinct values from the three outcomes; empty or omitted records all three. The connector declares no Studio units, so `defineEnvelopeEventReceivedTriggerBinding` needs no `configurationUI` and Dex Web saves the binding as `{}`.
|
|
21
|
+
- `envelopeEventReceivedWebhookEndpoint(connection)` and `newEnvelopeEventReceivedTrigger` build the same endpoint and a standalone runner without the project inbox; every Trigger of one connection shares one endpoint.
|
|
22
|
+
|
|
23
|
+
The unit tests mirror the Go endpoint tests for signatures, forgeries, filters, oversized and XML bodies, a missing key, and the inbox. The integration test runs the example against a real Dex Server with a local DocuSign stand-in: it refuses a forged delivery, consumes an uncorrelated one, resumes the Flow once from a signed outcome and its redelivery, skips a filtered outcome, and replays an inbox event recorded before a restart. Live DocuSign Connect deliveries have not been verified for this package.
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
{
|
|
2
|
+
"connectorId": "docusign",
|
|
3
|
+
"releaseTag": "connectors/docusign/go/v0.24.0",
|
|
4
|
+
"package": {
|
|
5
|
+
"ecosystem": "npm",
|
|
6
|
+
"name": "@superdurable/connector-docusign",
|
|
7
|
+
"version": "0.2.0"
|
|
8
|
+
},
|
|
9
|
+
"factories": [
|
|
10
|
+
{
|
|
11
|
+
"name": "newCreateEnvelopeFromTemplateStep",
|
|
12
|
+
"kind": "mutation",
|
|
13
|
+
"operationId": "createEnvelopeFromTemplate",
|
|
14
|
+
"inputType": "CreateEnvelopeFromTemplateInput",
|
|
15
|
+
"description": "Create one envelope from a server template, filling its roles in their routing order, and send it or keep it as a draft. DocuSign has no idempotency key, so the call runs with sync durability, tags the envelope with a hidden custom field derived from the Step's idempotency key, and on every later attempt looks for that envelope by the field before sending again; an outcome it cannot confirm selects uncertain.",
|
|
16
|
+
"fields": {
|
|
17
|
+
"stepType": "stepType",
|
|
18
|
+
"annotations": "annotations",
|
|
19
|
+
"connectionName": "connectionName",
|
|
20
|
+
"resultAttribute": "resultAttribute"
|
|
21
|
+
},
|
|
22
|
+
"branches": [
|
|
23
|
+
{
|
|
24
|
+
"id": "created",
|
|
25
|
+
"field": "created",
|
|
26
|
+
"optional": false
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "providerRejected",
|
|
30
|
+
"field": "providerRejected",
|
|
31
|
+
"optional": true
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "uncertain",
|
|
35
|
+
"field": "uncertain",
|
|
36
|
+
"optional": true
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "defect",
|
|
40
|
+
"field": "defect",
|
|
41
|
+
"optional": true
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"inputSchema": {
|
|
45
|
+
"$defs": {
|
|
46
|
+
"EnvelopeCustomField": {
|
|
47
|
+
"additionalProperties": false,
|
|
48
|
+
"description": "EnvelopeCustomField is one envelope text custom field, hidden from recipients, such as a correlation ID that a Connect event carries back.",
|
|
49
|
+
"properties": {
|
|
50
|
+
"name": {
|
|
51
|
+
"description": "Name is the field name, 1 to 50 characters.",
|
|
52
|
+
"type": "string"
|
|
53
|
+
},
|
|
54
|
+
"value": {
|
|
55
|
+
"description": "Value is the field value, at most 100 characters.",
|
|
56
|
+
"type": "string"
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"required": [
|
|
60
|
+
"name",
|
|
61
|
+
"value"
|
|
62
|
+
],
|
|
63
|
+
"type": "object"
|
|
64
|
+
},
|
|
65
|
+
"TemplateRole": {
|
|
66
|
+
"additionalProperties": false,
|
|
67
|
+
"description": "TemplateRole assigns one person to a template role.",
|
|
68
|
+
"properties": {
|
|
69
|
+
"email": {
|
|
70
|
+
"description": "Email is the recipient's email address, at most 100 characters.",
|
|
71
|
+
"type": "string"
|
|
72
|
+
},
|
|
73
|
+
"name": {
|
|
74
|
+
"description": "Name is the recipient's full name, 1 to 100 characters.",
|
|
75
|
+
"type": "string"
|
|
76
|
+
},
|
|
77
|
+
"roleName": {
|
|
78
|
+
"description": "RoleName is the template's role name, such as Customer, matched as DocuSign matches it.",
|
|
79
|
+
"type": "string"
|
|
80
|
+
},
|
|
81
|
+
"routingOrder": {
|
|
82
|
+
"description": "RoutingOrder overrides the role's routing order, 1 to 999; zero keeps the template's order, which decides who is asked to sign first.",
|
|
83
|
+
"type": "integer"
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"required": [
|
|
87
|
+
"email",
|
|
88
|
+
"name",
|
|
89
|
+
"roleName"
|
|
90
|
+
],
|
|
91
|
+
"type": "object"
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"additionalProperties": false,
|
|
95
|
+
"description": "CreateEnvelopeFromTemplateInput describes one envelope created from a DocuSign server template.",
|
|
96
|
+
"properties": {
|
|
97
|
+
"customFields": {
|
|
98
|
+
"description": "CustomFields adds hidden text custom fields, at most 10, such as a correlation ID that Connect events return. Names are 1 to 50 characters and unique; dexIdempotencyKey is reserved.",
|
|
99
|
+
"items": {
|
|
100
|
+
"$ref": "#/$defs/EnvelopeCustomField"
|
|
101
|
+
},
|
|
102
|
+
"type": "array"
|
|
103
|
+
},
|
|
104
|
+
"emailBlurb": {
|
|
105
|
+
"description": "EmailBlurb overrides the template's email message, at most 10,000 characters; blank keeps it.",
|
|
106
|
+
"type": "string"
|
|
107
|
+
},
|
|
108
|
+
"emailSubject": {
|
|
109
|
+
"description": "EmailSubject overrides the template's email subject, at most 100 characters; blank keeps it.",
|
|
110
|
+
"type": "string"
|
|
111
|
+
},
|
|
112
|
+
"isDraft": {
|
|
113
|
+
"description": "IsDraft creates the envelope with status created and sends nothing; false sends it at once.",
|
|
114
|
+
"type": "boolean"
|
|
115
|
+
},
|
|
116
|
+
"templateId": {
|
|
117
|
+
"description": "TemplateID is the server template's GUID, shown in DocuSign under Templates > the template > Template ID.",
|
|
118
|
+
"type": "string"
|
|
119
|
+
},
|
|
120
|
+
"templateRoles": {
|
|
121
|
+
"description": "TemplateRoles fills the template's roles by name, 1 to 100 of them. Every role the template requires must be filled.",
|
|
122
|
+
"items": {
|
|
123
|
+
"$ref": "#/$defs/TemplateRole"
|
|
124
|
+
},
|
|
125
|
+
"type": [
|
|
126
|
+
"array",
|
|
127
|
+
"null"
|
|
128
|
+
]
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"required": [
|
|
132
|
+
"templateId",
|
|
133
|
+
"templateRoles"
|
|
134
|
+
],
|
|
135
|
+
"type": "object"
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"name": "newGetEnvelopeStep",
|
|
140
|
+
"kind": "query",
|
|
141
|
+
"operationId": "getEnvelope",
|
|
142
|
+
"inputType": "GetEnvelopeInput",
|
|
143
|
+
"description": "Read one envelope's status, status timestamps, void reason, and text custom fields. DocuSign allows an app one status read per envelope every 15 minutes, so prefer the envelopeEventReceived Trigger and poll only as a fallback.",
|
|
144
|
+
"fields": {
|
|
145
|
+
"stepType": "stepType",
|
|
146
|
+
"annotations": "annotations",
|
|
147
|
+
"connectionName": "connectionName",
|
|
148
|
+
"resultAttribute": "resultAttribute"
|
|
149
|
+
},
|
|
150
|
+
"branches": [
|
|
151
|
+
{
|
|
152
|
+
"id": "found",
|
|
153
|
+
"field": "found",
|
|
154
|
+
"optional": false
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"id": "notFound",
|
|
158
|
+
"field": "notFound",
|
|
159
|
+
"optional": true
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"id": "providerRejected",
|
|
163
|
+
"field": "providerRejected",
|
|
164
|
+
"optional": true
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"id": "invalidResponse",
|
|
168
|
+
"field": "invalidResponse",
|
|
169
|
+
"optional": true
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"id": "defect",
|
|
173
|
+
"field": "defect",
|
|
174
|
+
"optional": true
|
|
175
|
+
}
|
|
176
|
+
],
|
|
177
|
+
"inputSchema": {
|
|
178
|
+
"additionalProperties": false,
|
|
179
|
+
"description": "GetEnvelopeInput names the envelope to read.",
|
|
180
|
+
"properties": {
|
|
181
|
+
"envelopeId": {
|
|
182
|
+
"description": "EnvelopeID is the envelope's GUID, such as a createEnvelopeFromTemplate Result's envelopeId.",
|
|
183
|
+
"type": "string"
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
"required": [
|
|
187
|
+
"envelopeId"
|
|
188
|
+
],
|
|
189
|
+
"type": "object"
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"name": "newListEnvelopeRecipientsStep",
|
|
194
|
+
"kind": "query",
|
|
195
|
+
"operationId": "listEnvelopeRecipients",
|
|
196
|
+
"inputType": "ListEnvelopeRecipientsInput",
|
|
197
|
+
"description": "List an envelope's recipients in routing order with each one's type, role, status, and sent, delivered, signed, and declined times, and the routing order DocuSign is currently waiting on.",
|
|
198
|
+
"fields": {
|
|
199
|
+
"stepType": "stepType",
|
|
200
|
+
"annotations": "annotations",
|
|
201
|
+
"connectionName": "connectionName",
|
|
202
|
+
"resultAttribute": "resultAttribute"
|
|
203
|
+
},
|
|
204
|
+
"branches": [
|
|
205
|
+
{
|
|
206
|
+
"id": "listed",
|
|
207
|
+
"field": "listed",
|
|
208
|
+
"optional": false
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"id": "notFound",
|
|
212
|
+
"field": "notFound",
|
|
213
|
+
"optional": true
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"id": "providerRejected",
|
|
217
|
+
"field": "providerRejected",
|
|
218
|
+
"optional": true
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"id": "invalidResponse",
|
|
222
|
+
"field": "invalidResponse",
|
|
223
|
+
"optional": true
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"id": "defect",
|
|
227
|
+
"field": "defect",
|
|
228
|
+
"optional": true
|
|
229
|
+
}
|
|
230
|
+
],
|
|
231
|
+
"inputSchema": {
|
|
232
|
+
"additionalProperties": false,
|
|
233
|
+
"description": "ListEnvelopeRecipientsInput names the envelope whose recipients to list.",
|
|
234
|
+
"properties": {
|
|
235
|
+
"envelopeId": {
|
|
236
|
+
"description": "EnvelopeID is the envelope's GUID.",
|
|
237
|
+
"type": "string"
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
"required": [
|
|
241
|
+
"envelopeId"
|
|
242
|
+
],
|
|
243
|
+
"type": "object"
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"name": "newVoidEnvelopeStep",
|
|
248
|
+
"kind": "mutation",
|
|
249
|
+
"operationId": "voidEnvelope",
|
|
250
|
+
"inputType": "VoidEnvelopeInput",
|
|
251
|
+
"description": "Void one sent or delivered envelope with a reason, the compensation for a send that must not complete. An envelope that is already voided also selects voided, so a repeated call is safe; a completed, declined, or draft envelope selects notVoidable with its status.",
|
|
252
|
+
"fields": {
|
|
253
|
+
"stepType": "stepType",
|
|
254
|
+
"annotations": "annotations",
|
|
255
|
+
"connectionName": "connectionName",
|
|
256
|
+
"resultAttribute": "resultAttribute"
|
|
257
|
+
},
|
|
258
|
+
"branches": [
|
|
259
|
+
{
|
|
260
|
+
"id": "voided",
|
|
261
|
+
"field": "voided",
|
|
262
|
+
"optional": false
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"id": "notVoidable",
|
|
266
|
+
"field": "notVoidable",
|
|
267
|
+
"optional": true
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
"id": "notFound",
|
|
271
|
+
"field": "notFound",
|
|
272
|
+
"optional": true
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
"id": "providerRejected",
|
|
276
|
+
"field": "providerRejected",
|
|
277
|
+
"optional": true
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"id": "invalidResponse",
|
|
281
|
+
"field": "invalidResponse",
|
|
282
|
+
"optional": true
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
"id": "defect",
|
|
286
|
+
"field": "defect",
|
|
287
|
+
"optional": true
|
|
288
|
+
}
|
|
289
|
+
],
|
|
290
|
+
"inputSchema": {
|
|
291
|
+
"additionalProperties": false,
|
|
292
|
+
"description": "VoidEnvelopeInput names the envelope to void and why.",
|
|
293
|
+
"properties": {
|
|
294
|
+
"envelopeId": {
|
|
295
|
+
"description": "EnvelopeID is the envelope's GUID.",
|
|
296
|
+
"type": "string"
|
|
297
|
+
},
|
|
298
|
+
"voidedReason": {
|
|
299
|
+
"description": "VoidedReason is shown to the recipients, 1 to 200 characters, such as \"Signing deadline passed\".",
|
|
300
|
+
"type": "string"
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
"required": [
|
|
304
|
+
"envelopeId",
|
|
305
|
+
"voidedReason"
|
|
306
|
+
],
|
|
307
|
+
"type": "object"
|
|
308
|
+
}
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
"name": "newDownloadCombinedDocumentStep",
|
|
312
|
+
"kind": "query",
|
|
313
|
+
"operationId": "downloadCombinedDocument",
|
|
314
|
+
"inputType": "DownloadCombinedDocumentInput",
|
|
315
|
+
"description": "Stream an envelope's documents as one combined PDF, optionally with the certificate of completion, through a SHA-256 digest and into the application's CombinedDocumentStore when one is configured. The Result holds the byte count, digest, and the store's location, never the PDF bytes.",
|
|
316
|
+
"fields": {
|
|
317
|
+
"stepType": "stepType",
|
|
318
|
+
"annotations": "annotations",
|
|
319
|
+
"connectionName": "connectionName",
|
|
320
|
+
"resultAttribute": "resultAttribute"
|
|
321
|
+
},
|
|
322
|
+
"branches": [
|
|
323
|
+
{
|
|
324
|
+
"id": "downloaded",
|
|
325
|
+
"field": "downloaded",
|
|
326
|
+
"optional": false
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
"id": "notFound",
|
|
330
|
+
"field": "notFound",
|
|
331
|
+
"optional": true
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"id": "tooLarge",
|
|
335
|
+
"field": "tooLarge",
|
|
336
|
+
"optional": true
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"id": "providerRejected",
|
|
340
|
+
"field": "providerRejected",
|
|
341
|
+
"optional": true
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
"id": "invalidResponse",
|
|
345
|
+
"field": "invalidResponse",
|
|
346
|
+
"optional": true
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
"id": "defect",
|
|
350
|
+
"field": "defect",
|
|
351
|
+
"optional": true
|
|
352
|
+
}
|
|
353
|
+
],
|
|
354
|
+
"inputSchema": {
|
|
355
|
+
"additionalProperties": false,
|
|
356
|
+
"description": "DownloadCombinedDocumentInput names the envelope whose documents to download.",
|
|
357
|
+
"properties": {
|
|
358
|
+
"envelopeId": {
|
|
359
|
+
"description": "EnvelopeID is the envelope's GUID, normally of a completed envelope.",
|
|
360
|
+
"type": "string"
|
|
361
|
+
},
|
|
362
|
+
"includeCertificate": {
|
|
363
|
+
"description": "IncludeCertificate appends DocuSign's certificate of completion to the combined PDF.",
|
|
364
|
+
"type": "boolean"
|
|
365
|
+
}
|
|
366
|
+
},
|
|
367
|
+
"required": [
|
|
368
|
+
"envelopeId"
|
|
369
|
+
],
|
|
370
|
+
"type": "object"
|
|
371
|
+
}
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
"name": "defineEnvelopeEventReceivedTriggerBinding",
|
|
375
|
+
"kind": "trigger",
|
|
376
|
+
"triggerName": "envelopeEventReceived",
|
|
377
|
+
"fields": {
|
|
378
|
+
"connectionName": "connectionName",
|
|
379
|
+
"bindingName": "bindingName",
|
|
380
|
+
"configurationUI": "configurationUI"
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
]
|
|
384
|
+
}
|