n8n-nodes-duo 1.2.1 → 1.3.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.
@@ -110,7 +110,7 @@ __export(DuoSecurity_node_exports, {
110
110
  module.exports = __toCommonJS(DuoSecurity_node_exports);
111
111
  var import_n8n_workflow2 = require("n8n-workflow");
112
112
 
113
- // nodes/DuoSecurity/V1/DuoSecurityV1Base.ts
113
+ // lib/DuoSecurityV1Base.ts
114
114
  var import_n8n_workflow = require("n8n-workflow");
115
115
 
116
116
  // nodes/DuoSecurity/V1/duoProperties.ts
@@ -461,7 +461,7 @@ function safeStringify(obj) {
461
461
  return obj ? JSON.stringify(sortParams(obj)) : "";
462
462
  }
463
463
 
464
- // nodes/DuoSecurity/V1/DuoSecurityV1Base.ts
464
+ // lib/DuoSecurityV1Base.ts
465
465
  var DuoSecurityV1Base = class {
466
466
  constructor(baseDescription) {
467
467
  this.icon = {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../wetomate-node-toolkit/src/collections.ts", "../../../../wetomate-node-toolkit/src/parameter-mapping.ts", "../../../../wetomate-node-toolkit/src/index.ts", "../../../nodes/DuoSecurity/DuoSecurity.node.ts", "../../../nodes/DuoSecurity/V1/DuoSecurityV1Base.ts", "../../../nodes/DuoSecurity/V1/duoProperties.ts", "../../../nodes/DuoSecurity/V1/duoParameterMapping.ts", "../../../nodes/DuoSecurity/utils/duoUtils.ts", "../../../nodes/DuoSecurity/V1/DuoSecurityV1.ts"],
4
- "mappings": "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",
3
+ "sources": ["../../../../wetomate-node-toolkit/src/collections.ts", "../../../../wetomate-node-toolkit/src/parameter-mapping.ts", "../../../../wetomate-node-toolkit/src/index.ts", "../../../nodes/DuoSecurity/DuoSecurity.node.ts", "../../../lib/DuoSecurityV1Base.ts", "../../../nodes/DuoSecurity/V1/duoProperties.ts", "../../../nodes/DuoSecurity/V1/duoParameterMapping.ts", "../../../nodes/DuoSecurity/utils/duoUtils.ts", "../../../nodes/DuoSecurity/V1/DuoSecurityV1.ts"],
4
+ "mappings": "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",
5
5
  "names": ["exports", "processOptionalCollections", "exports", "mapNodeParameters", "exports", "import_n8n_workflow"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-nodes-duo",
3
- "version": "1.2.1",
3
+ "version": "1.3.0",
4
4
  "description": "Duo Security multi-factor authentication community node for n8n",
5
5
  "keywords": [
6
6
  "n8n-community-node-package",
@@ -38,8 +38,7 @@
38
38
  "prepublishOnly": "npm run build && npm run lint && npm test"
39
39
  },
40
40
  "files": [
41
- "dist",
42
- "examples"
41
+ "dist"
43
42
  ],
44
43
  "n8n": {
45
44
  "strict": true,
@@ -1,291 +0,0 @@
1
- {
2
- "id": "wetomate-example-duo-capability-showcase",
3
- "name": "[Wetomate Example] Duo Security Capability Showcase",
4
- "nodes": [
5
- {
6
- "parameters": {
7
- "content": "## Duo Security capability showcase\n\nThis inactive workflow demonstrates every operation exposed by the Duo Security node. Each scenario has its own Manual Trigger as the leftmost entry point so you can test it independently.\n\n### Setup\n\nCreate a Duo Security Auth API credential, then assign it to each Duo node after importing. Replace `alice@example.com` with an enrolled test user. The AUTH scenarios send real authentication requests.\n\nPING and LOGO intentionally have no user parameters: Duo defines both endpoints as parameterless GET requests.\n\nThe AI scenario also needs a chat model credential configured on the Chat Model node.",
8
- "height": 520,
9
- "width": 420,
10
- "color": 5
11
- },
12
- "id": "wetomate-example-duo-showcase-note",
13
- "name": "Capability showcase overview",
14
- "type": "n8n-nodes-base.stickyNote",
15
- "typeVersion": 1,
16
- "position": [-1168, -32]
17
- },
18
- {
19
- "parameters": {},
20
- "id": "wetomate-example-duo-ping-check-trigger",
21
- "name": "Scenario 1: Ping and Check",
22
- "type": "n8n-nodes-base.manualTrigger",
23
- "typeVersion": 1,
24
- "position": [-640, 0]
25
- },
26
- {
27
- "parameters": { "endpoint": "ping" },
28
- "id": "wetomate-example-duo-ping",
29
- "name": "PING: Check Duo Availability",
30
- "type": "n8n-nodes-duo.duoSecurity",
31
- "typeVersion": 1,
32
- "position": [-416, 0]
33
- },
34
- {
35
- "parameters": { "endpoint": "check" },
36
- "id": "wetomate-example-duo-check",
37
- "name": "CHECK: Verify Signature",
38
- "type": "n8n-nodes-duo.duoSecurity",
39
- "typeVersion": 1,
40
- "position": [-192, 0]
41
- },
42
- {
43
- "parameters": {},
44
- "id": "wetomate-example-duo-sync-trigger",
45
- "name": "Scenario 2: Synchronous Authentication",
46
- "type": "n8n-nodes-base.manualTrigger",
47
- "typeVersion": 1,
48
- "position": [-640, 320]
49
- },
50
- {
51
- "parameters": {
52
- "endpoint": "preauth",
53
- "userIdentifier": { "mode": "username", "value": "alice@example.com" },
54
- "preAuthOptionalFields": { "clientSupportsVerifiedPush": true }
55
- },
56
- "id": "wetomate-example-duo-sync-preauth",
57
- "name": "PREAUTH: Check User Access",
58
- "type": "n8n-nodes-duo.duoSecurity",
59
- "typeVersion": 1,
60
- "position": [-416, 320]
61
- },
62
- {
63
- "parameters": {
64
- "endpoint": "auth",
65
- "userIdentifier": { "mode": "username", "value": "alice@example.com" },
66
- "factor": "push",
67
- "device": "auto",
68
- "pushinfo": { "pairs": [{ "key": "source", "value": "Wetomate sync showcase" }] },
69
- "authOptionalFields": { "async": false, "type": "Synchronous showcase" }
70
- },
71
- "id": "wetomate-example-duo-sync-auth",
72
- "name": "AUTH: Synchronous Duo Push",
73
- "type": "n8n-nodes-duo.duoSecurity",
74
- "typeVersion": 1,
75
- "position": [-192, 320]
76
- },
77
- {
78
- "parameters": {
79
- "conditions": {
80
- "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict", "version": 2 },
81
- "conditions": [{
82
- "id": "wetomate-example-duo-sync-allow",
83
- "leftValue": "={{ $json.result.response.result }}",
84
- "rightValue": "allow",
85
- "operator": { "type": "string", "operation": "equals" }
86
- }],
87
- "combinator": "and"
88
- }
89
- },
90
- "id": "wetomate-example-duo-sync-check",
91
- "name": "CHECK: Was Sync Auth Allowed?",
92
- "type": "n8n-nodes-base.if",
93
- "typeVersion": 2.2,
94
- "position": [32, 320]
95
- },
96
- {
97
- "parameters": {
98
- "assignments": { "assignments": [{ "id": "wetomate-example-duo-sync-approved", "name": "authenticationResult", "type": "string", "value": "approved" }] },
99
- "options": {}
100
- },
101
- "id": "wetomate-example-duo-sync-approved",
102
- "name": "Sync Auth Approved",
103
- "type": "n8n-nodes-base.set",
104
- "typeVersion": 3.4,
105
- "position": [256, 224]
106
- },
107
- {
108
- "parameters": {
109
- "assignments": { "assignments": [{ "id": "wetomate-example-duo-sync-denied", "name": "authenticationResult", "type": "string", "value": "denied" }] },
110
- "options": {}
111
- },
112
- "id": "wetomate-example-duo-sync-denied",
113
- "name": "Sync Auth Denied",
114
- "type": "n8n-nodes-base.set",
115
- "typeVersion": 3.4,
116
- "position": [256, 416]
117
- },
118
- {
119
- "parameters": {},
120
- "id": "wetomate-example-duo-async-trigger",
121
- "name": "Scenario 3: Asynchronous Authentication",
122
- "type": "n8n-nodes-base.manualTrigger",
123
- "typeVersion": 1,
124
- "position": [-640, 720]
125
- },
126
- {
127
- "parameters": {
128
- "endpoint": "preauth",
129
- "userIdentifier": { "mode": "username", "value": "alice@example.com" },
130
- "preAuthOptionalFields": { "clientSupportsVerifiedPush": true }
131
- },
132
- "id": "wetomate-example-duo-async-preauth",
133
- "name": "PREAUTH: Check Before Async Push",
134
- "type": "n8n-nodes-duo.duoSecurity",
135
- "typeVersion": 1,
136
- "position": [-416, 720]
137
- },
138
- {
139
- "parameters": {
140
- "endpoint": "auth",
141
- "userIdentifier": { "mode": "username", "value": "alice@example.com" },
142
- "factor": "push",
143
- "device": "auto",
144
- "pushinfo": { "pairs": [{ "key": "source", "value": "Wetomate async showcase" }] },
145
- "authOptionalFields": { "async": true, "type": "Asynchronous showcase" }
146
- },
147
- "id": "wetomate-example-duo-async-auth",
148
- "name": "AUTH: Start Asynchronous Duo Push",
149
- "type": "n8n-nodes-duo.duoSecurity",
150
- "typeVersion": 1,
151
- "position": [-192, 720]
152
- },
153
- {
154
- "parameters": { "amount": 5, "unit": "seconds" },
155
- "id": "wetomate-example-duo-async-wait",
156
- "name": "Wait Before Status Poll",
157
- "type": "n8n-nodes-base.wait",
158
- "typeVersion": 1.1,
159
- "position": [32, 720]
160
- },
161
- {
162
- "parameters": {
163
- "endpoint": "auth_status",
164
- "txid": "={{ $('AUTH: Start Asynchronous Duo Push').item.json.result.response.txid }}"
165
- },
166
- "id": "wetomate-example-duo-async-status",
167
- "name": "AUTH STATUS: Poll Transaction",
168
- "type": "n8n-nodes-duo.duoSecurity",
169
- "typeVersion": 1,
170
- "position": [256, 640]
171
- },
172
- {
173
- "parameters": {
174
- "conditions": {
175
- "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict", "version": 2 },
176
- "conditions": [{
177
- "id": "wetomate-example-duo-async-waiting",
178
- "leftValue": "={{ $json.result.response.result }}",
179
- "rightValue": "waiting",
180
- "operator": { "type": "string", "operation": "equals" }
181
- }],
182
- "combinator": "and"
183
- }
184
- },
185
- "id": "wetomate-example-duo-async-if",
186
- "name": "Still Waiting?",
187
- "type": "n8n-nodes-base.if",
188
- "typeVersion": 2.2,
189
- "position": [480, 720]
190
- },
191
- {
192
- "parameters": {
193
- "assignments": { "assignments": [{ "id": "wetomate-example-duo-async-complete", "name": "status", "type": "string", "value": "={{ $json.result.response.result }}" }] },
194
- "options": {}
195
- },
196
- "id": "wetomate-example-duo-async-complete",
197
- "name": "Authentication Complete",
198
- "type": "n8n-nodes-base.set",
199
- "typeVersion": 3.4,
200
- "position": [704, 720]
201
- },
202
- {
203
- "parameters": {},
204
- "id": "wetomate-example-duo-logo-trigger",
205
- "name": "Scenario 4: Retrieve Logo",
206
- "type": "n8n-nodes-base.manualTrigger",
207
- "typeVersion": 1,
208
- "position": [-640, 944]
209
- },
210
- {
211
- "parameters": { "endpoint": "logo" },
212
- "id": "wetomate-example-duo-logo",
213
- "name": "LOGO: Retrieve Stored Logo",
214
- "type": "n8n-nodes-duo.duoSecurity",
215
- "typeVersion": 1,
216
- "position": [-416, 944]
217
- },
218
- {
219
- "parameters": {},
220
- "id": "wetomate-example-duo-ai-trigger",
221
- "name": "Scenario 5: Duo as AI Tool",
222
- "type": "n8n-nodes-base.manualTrigger",
223
- "typeVersion": 1,
224
- "position": [-640, 1264]
225
- },
226
- {
227
- "parameters": {
228
- "assignments": { "assignments": [{ "id": "wetomate-example-duo-ai-prompt", "name": "prompt", "type": "string", "value": "Check whether alice@example.com is enrolled and allowed to authenticate with Duo. Explain the result briefly." }] },
229
- "options": {}
230
- },
231
- "id": "wetomate-example-duo-ai-prompt",
232
- "name": "Prepare AI Request",
233
- "type": "n8n-nodes-base.set",
234
- "typeVersion": 3.4,
235
- "position": [-416, 1264]
236
- },
237
- {
238
- "parameters": {
239
- "promptType": "define",
240
- "text": "={{ $json.prompt }}",
241
- "options": { "systemMessage": "You are a careful access assistant. Use the Duo Security tool to check a user's authentication readiness. Treat only an explicit allow result as approval and explain denied, waiting, or failed results clearly." }
242
- },
243
- "id": "wetomate-example-duo-ai-agent",
244
- "name": "Duo Access Assistant",
245
- "type": "@n8n/n8n-nodes-langchain.agent",
246
- "typeVersion": 2.2,
247
- "position": [-192, 1264]
248
- },
249
- {
250
- "parameters": { "modelName": "gpt-4o-mini", "options": {} },
251
- "id": "wetomate-example-duo-ai-model",
252
- "name": "Chat Model",
253
- "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
254
- "typeVersion": 1.2,
255
- "position": [-184, 1496]
256
- },
257
- {
258
- "parameters": {
259
- "endpoint": "preauth",
260
- "userIdentifier": { "mode": "username", "value": "={{ $fromAI('username', 'The Duo username to check', 'string') }}" },
261
- "preAuthOptionalFields": { "clientSupportsVerifiedPush": true }
262
- },
263
- "id": "wetomate-example-duo-ai-tool",
264
- "name": "Duo Security Tool",
265
- "type": "n8n-nodes-duo.duoSecurityTool",
266
- "typeVersion": 1,
267
- "position": [-56, 1496]
268
- }
269
- ],
270
- "connections": {
271
- "Scenario 1: Ping and Check": { "main": [[{ "node": "PING: Check Duo Availability", "type": "main", "index": 0 }]] },
272
- "PING: Check Duo Availability": { "main": [[{ "node": "CHECK: Verify Signature", "type": "main", "index": 0 }]] },
273
- "Scenario 2: Synchronous Authentication": { "main": [[{ "node": "PREAUTH: Check User Access", "type": "main", "index": 0 }]] },
274
- "PREAUTH: Check User Access": { "main": [[{ "node": "AUTH: Synchronous Duo Push", "type": "main", "index": 0 }]] },
275
- "AUTH: Synchronous Duo Push": { "main": [[{ "node": "CHECK: Was Sync Auth Allowed?", "type": "main", "index": 0 }]] },
276
- "CHECK: Was Sync Auth Allowed?": { "main": [[{ "node": "Sync Auth Approved", "type": "main", "index": 0 }], [{ "node": "Sync Auth Denied", "type": "main", "index": 0 }]] },
277
- "Scenario 3: Asynchronous Authentication": { "main": [[{ "node": "PREAUTH: Check Before Async Push", "type": "main", "index": 0 }]] },
278
- "PREAUTH: Check Before Async Push": { "main": [[{ "node": "AUTH: Start Asynchronous Duo Push", "type": "main", "index": 0 }]] },
279
- "AUTH: Start Asynchronous Duo Push": { "main": [[{ "node": "Wait Before Status Poll", "type": "main", "index": 0 }]] },
280
- "Wait Before Status Poll": { "main": [[{ "node": "AUTH STATUS: Poll Transaction", "type": "main", "index": 0 }]] },
281
- "AUTH STATUS: Poll Transaction": { "main": [[{ "node": "Still Waiting?", "type": "main", "index": 0 }]] },
282
- "Still Waiting?": { "main": [[{ "node": "Wait Before Status Poll", "type": "main", "index": 0 }], [{ "node": "Authentication Complete", "type": "main", "index": 0 }]] },
283
- "Scenario 4: Retrieve Logo": { "main": [[{ "node": "LOGO: Retrieve Stored Logo", "type": "main", "index": 0 }]] },
284
- "Scenario 5: Duo as AI Tool": { "main": [[{ "node": "Prepare AI Request", "type": "main", "index": 0 }]] },
285
- "Prepare AI Request": { "main": [[{ "node": "Duo Access Assistant", "type": "main", "index": 0 }]] },
286
- "Chat Model": { "ai_languageModel": [[{ "node": "Duo Access Assistant", "type": "ai_languageModel", "index": 0 }]] },
287
- "Duo Security Tool": { "ai_tool": [[{ "node": "Duo Access Assistant", "type": "ai_tool", "index": 0 }]] }
288
- },
289
- "active": false,
290
- "settings": { "executionOrder": "v1" }
291
- }
@@ -1,290 +0,0 @@
1
- {
2
- "id": "wetomate-example-duo-expense-approval",
3
- "name": "[Wetomate Example] Duo Expense Reimbursement Approval",
4
- "nodes": [
5
- {
6
- "parameters": {
7
- "content": "## Human approval workflow\n\n### How it works\n\nAn employee submits an expense request. The workflow preserves the form fields, checks the manager in Duo, and sends a synchronous Push with safe expense context. The approval gate routes an explicit allow result to the approved path; every other result follows the rejected path.\n\n### Setup\n\nCreate a Duo Auth API credential, replace the placeholder manager username, and test the form with a non-production expense before activation. Replace the outcome nodes with your finance, payroll, notification, or audit action.\n\n### Customization\n\nKeep the manager mapping trusted and keep Push Info concise. Never send receipts, payment card details, credentials, tokens, or other secrets in the authentication request.",
8
- "height": 644,
9
- "width": 416,
10
- "color": 5
11
- },
12
- "id": "wetomate-example-duo-expense-note-overview",
13
- "name": "Main workflow overview",
14
- "type": "n8n-nodes-base.stickyNote",
15
- "typeVersion": 1,
16
- "position": [-496, -224]
17
- },
18
- {
19
- "parameters": {
20
- "content": "## Request and preserve input\n\nCollect the expense form fields and keep them available while adding the trusted manager username.",
21
- "height": 284,
22
- "width": 432,
23
- "color": 7
24
- },
25
- "id": "wetomate-example-duo-expense-note-push",
26
- "name": "Request and preserve input",
27
- "type": "n8n-nodes-base.stickyNote",
28
- "typeVersion": 1,
29
- "position": [-48, -32]
30
- },
31
- {
32
- "parameters": {
33
- "content": "## Check and request Duo approval\n\nVerify the manager account, then send the expense reference, employee, amount, currency, and description in Push Info.",
34
- "height": 332,
35
- "width": 384,
36
- "color": 7
37
- },
38
- "id": "wetomate-example-duo-expense-note-next-step",
39
- "name": "Check and request Duo approval",
40
- "type": "n8n-nodes-base.stickyNote",
41
- "typeVersion": 1,
42
- "position": [416, -80]
43
- },
44
- {
45
- "parameters": {
46
- "content": "## Route the decision\n\nThe manager's explicit allow result selects the approved branch; the other branch records a rejection for follow-up.",
47
- "height": 524,
48
- "width": 496,
49
- "color": 7
50
- },
51
- "id": "wetomate-example-duo-expense-note-outcome",
52
- "name": "Route the decision",
53
- "type": "n8n-nodes-base.stickyNote",
54
- "typeVersion": 1,
55
- "position": [816, -176]
56
- },
57
- {
58
- "parameters": {
59
- "formTitle": "Expense reimbursement request",
60
- "formDescription": "Submit an expense for manager approval. The manager will receive a Duo Push with the request details.",
61
- "formFields": {
62
- "values": [
63
- {
64
- "fieldLabel": "Employee name",
65
- "fieldType": "text",
66
- "requiredField": true
67
- },
68
- {
69
- "fieldLabel": "Employee email",
70
- "fieldType": "email",
71
- "requiredField": true
72
- },
73
- {
74
- "fieldLabel": "Expense description",
75
- "fieldType": "text",
76
- "requiredField": true
77
- },
78
- {
79
- "fieldLabel": "Amount",
80
- "fieldType": "number",
81
- "requiredField": true
82
- },
83
- {
84
- "fieldLabel": "Currency",
85
- "fieldType": "text",
86
- "defaultValue": "USD",
87
- "requiredField": true
88
- },
89
- {
90
- "fieldLabel": "Expense date",
91
- "fieldType": "date",
92
- "requiredField": true
93
- },
94
- {
95
- "fieldLabel": "Expense reference",
96
- "fieldType": "text",
97
- "placeholder": "EXP-1042",
98
- "requiredField": true
99
- }
100
- ]
101
- },
102
- "options": { "appendAttribution": false }
103
- },
104
- "id": "wetomate-example-duo-expense-form",
105
- "name": "Expense Request Form",
106
- "type": "n8n-nodes-base.formTrigger",
107
- "typeVersion": 2.2,
108
- "position": [0, 96]
109
- },
110
- {
111
- "parameters": {
112
- "assignments": {
113
- "assignments": [
114
- {
115
- "id": "wetomate-example-duo-expense-manager",
116
- "name": "managerUsername",
117
- "type": "string",
118
- "value": "manager@example.com"
119
- }
120
- ]
121
- },
122
- "includeOtherFields": true,
123
- "options": {}
124
- },
125
- "id": "wetomate-example-duo-expense-context",
126
- "name": "Set Approval Context",
127
- "type": "n8n-nodes-base.set",
128
- "typeVersion": 3.4,
129
- "position": [224, 96]
130
- },
131
- {
132
- "parameters": {
133
- "endpoint": "preauth",
134
- "userIdentifier": {
135
- "mode": "username",
136
- "value": "={{ $json.managerUsername }}"
137
- },
138
- "preAuthOptionalFields": {
139
- "clientSupportsVerifiedPush": true
140
- }
141
- },
142
- "id": "wetomate-example-duo-expense-preauth",
143
- "name": "Check Manager Access",
144
- "type": "n8n-nodes-duo.duoSecurity",
145
- "typeVersion": 1,
146
- "position": [448, 96]
147
- },
148
- {
149
- "parameters": {
150
- "endpoint": "auth",
151
- "userIdentifier": {
152
- "mode": "username",
153
- "value": "={{ $('Set Approval Context').item.json.managerUsername }}"
154
- },
155
- "factor": "push",
156
- "device": "auto",
157
- "pushinfo": {
158
- "pairs": [
159
- {
160
- "key": "expense",
161
- "value": "={{ $('Set Approval Context').item.json['Expense reference'] }}"
162
- },
163
- {
164
- "key": "employee",
165
- "value": "={{ $('Set Approval Context').item.json['Employee name'] }}"
166
- },
167
- {
168
- "key": "amount",
169
- "value": "={{ $('Set Approval Context').item.json.Amount }} {{ $('Set Approval Context').item.json.Currency }}"
170
- },
171
- {
172
- "key": "description",
173
- "value": "={{ $('Set Approval Context').item.json['Expense description'] }}"
174
- }
175
- ]
176
- },
177
- "authOptionalFields": {
178
- "async": false,
179
- "display_username": "={{ $('Set Approval Context').item.json['Employee email'] }}",
180
- "type": "Expense reimbursement approval"
181
- }
182
- },
183
- "id": "wetomate-example-duo-expense-auth",
184
- "name": "Request Manager Approval",
185
- "type": "n8n-nodes-duo.duoSecurity",
186
- "typeVersion": 1,
187
- "position": [672, 96]
188
- },
189
- {
190
- "parameters": {
191
- "conditions": {
192
- "options": {
193
- "caseSensitive": true,
194
- "leftValue": "",
195
- "typeValidation": "strict",
196
- "version": 2
197
- },
198
- "conditions": [
199
- {
200
- "id": "wetomate-example-duo-expense-allow",
201
- "leftValue": "={{ $json.result.response.result }}",
202
- "rightValue": "allow",
203
- "operator": { "type": "string", "operation": "equals" }
204
- }
205
- ],
206
- "combinator": "and"
207
- }
208
- },
209
- "id": "wetomate-example-duo-expense-if",
210
- "name": "Manager Approved?",
211
- "type": "n8n-nodes-base.if",
212
- "typeVersion": 2.2,
213
- "position": [896, 96]
214
- },
215
- {
216
- "parameters": {
217
- "assignments": {
218
- "assignments": [
219
- {
220
- "id": "wetomate-example-duo-expense-approved-status",
221
- "name": "status",
222
- "type": "string",
223
- "value": "approved"
224
- },
225
- {
226
- "id": "wetomate-example-duo-expense-approved-action",
227
- "name": "nextAction",
228
- "type": "string",
229
- "value": "Send this approved expense to finance or payroll"
230
- }
231
- ]
232
- },
233
- "options": {}
234
- },
235
- "id": "wetomate-example-duo-expense-approved",
236
- "name": "Mark Expense Approved",
237
- "type": "n8n-nodes-base.set",
238
- "typeVersion": 3.4,
239
- "position": [1120, 0]
240
- },
241
- {
242
- "parameters": {
243
- "assignments": {
244
- "assignments": [
245
- {
246
- "id": "wetomate-example-duo-expense-denied-status",
247
- "name": "status",
248
- "type": "string",
249
- "value": "denied"
250
- },
251
- {
252
- "id": "wetomate-example-duo-expense-denied-action",
253
- "name": "nextAction",
254
- "type": "string",
255
- "value": "Notify the employee and record the rejection"
256
- }
257
- ]
258
- },
259
- "options": {}
260
- },
261
- "id": "wetomate-example-duo-expense-denied",
262
- "name": "Record Expense Rejection",
263
- "type": "n8n-nodes-base.set",
264
- "typeVersion": 3.4,
265
- "position": [1120, 192]
266
- }
267
- ],
268
- "connections": {
269
- "Expense Request Form": {
270
- "main": [[{ "node": "Set Approval Context", "type": "main", "index": 0 }]]
271
- },
272
- "Set Approval Context": {
273
- "main": [[{ "node": "Check Manager Access", "type": "main", "index": 0 }]]
274
- },
275
- "Check Manager Access": {
276
- "main": [[{ "node": "Request Manager Approval", "type": "main", "index": 0 }]]
277
- },
278
- "Request Manager Approval": {
279
- "main": [[{ "node": "Manager Approved?", "type": "main", "index": 0 }]]
280
- },
281
- "Manager Approved?": {
282
- "main": [
283
- [{ "node": "Mark Expense Approved", "type": "main", "index": 0 }],
284
- [{ "node": "Record Expense Rejection", "type": "main", "index": 0 }]
285
- ]
286
- }
287
- },
288
- "active": false,
289
- "settings": { "executionOrder": "v1" }
290
- }
@@ -1,43 +0,0 @@
1
- # Duo expense reimbursement approval
2
-
3
- ## Quick overview
4
-
5
- Collect an expense request, ask the manager for approval with Duo Push, and route the result to an approved or rejected outcome.
6
-
7
- ## How it works
8
-
9
- 1. The form collects the employee, expense description, amount, currency, date, and reference. Visible labels become the n8n output keys.
10
- 2. Set Approval Context preserves those submitted fields and adds the trusted manager username.
11
- 3. Check Manager Access calls Duo PREAUTH to check the manager account and available factors.
12
- 4. Request Manager Approval sends a synchronous Duo Push with safe expense context: reference, employee, amount, currency, and description.
13
- 5. Manager Approved? checks for an explicit Duo `allow` result and selects the approved or rejected branch.
14
- 6. Replace the outcome nodes with the finance, payroll, notification, or audit action used by your organization.
15
-
16
- ## Requirements
17
-
18
- - A Duo Security Auth API application and credential.
19
- - An enrolled Duo manager account.
20
- - n8n with the Duo community node installed.
21
- - A safe test expense and test finance destination.
22
-
23
- ## Setup
24
-
25
- 1. Import the workflow and create a Duo Security credential with the Auth API integration key, secret key, and hostname.
26
- 2. Open Set Approval Context and replace `manager@example.com` with a trusted Duo username. Use a trusted employee-to-manager lookup in a real process.
27
- 3. Open the form URL and submit a non-production expense so the manager receives the Duo Push.
28
- 4. Confirm that Push Info contains only safe context, then approve or deny the request in Duo Mobile.
29
- 5. Replace the approved and rejected outcome nodes with your finance, payroll, notification, and audit actions before activation.
30
-
31
- ## Inputs
32
-
33
- The form uses its visible labels as keys:
34
-
35
- Employee name, Employee email, Expense description, Amount, Currency, Expense date, Expense reference
36
-
37
- ## Outputs
38
-
39
- The branches add `status` (`approved` or `denied`) and `nextAction`. Preserve the original request fields when connecting finance or audit systems.
40
-
41
- ## Additional info
42
-
43
- The workflow is inactive and uses a placeholder manager. Keep Push Info concise and exclude receipts, payment card details, credentials, tokens, and other secrets.