@gotohuman/n8n-nodes-gotohuman 0.2.3 → 0.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.
- package/dist/nodes/GotoHuman/GotoHuman.node.d.ts +1 -0
- package/dist/nodes/GotoHuman/GotoHuman.node.js +202 -4
- package/dist/nodes/GotoHuman/GotoHuman.node.js.map +1 -1
- package/dist/nodes/GotoHuman/GotoHumanTrigger.node.d.ts +2 -0
- package/dist/nodes/GotoHuman/GotoHumanTrigger.node.js +102 -21
- package/dist/nodes/GotoHuman/GotoHumanTrigger.node.js.map +1 -1
- package/dist/nodes/GotoHuman/GotoHumanTrigger.node.json +1 -1
- package/dist/nodes/GotoHuman/RequestReview.node.json +1 -1
- package/dist/nodes/GotoHuman/helpers.d.ts +9 -1
- package/dist/nodes/GotoHuman/helpers.js +151 -25
- package/dist/nodes/GotoHuman/helpers.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -1,34 +1,156 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.gotoHumanWebhookMethods = exports.BASE_URL = void 0;
|
|
4
|
+
exports.getTriggerOn = getTriggerOn;
|
|
5
|
+
exports.isAgentWebhookTrigger = isAgentWebhookTrigger;
|
|
6
|
+
exports.getWebhookFormId = getWebhookFormId;
|
|
7
|
+
exports.getWebhookAgentId = getWebhookAgentId;
|
|
8
|
+
exports.fetchN8nFormsListSearch = fetchN8nFormsListSearch;
|
|
9
|
+
exports.fetchN8nAgentsListSearch = fetchN8nAgentsListSearch;
|
|
4
10
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
11
|
exports.BASE_URL = 'https://api.gotohuman.com';
|
|
12
|
+
async function gotoHumanHookRequest(hook, options) {
|
|
13
|
+
var _a;
|
|
14
|
+
const requestOptions = {
|
|
15
|
+
...options,
|
|
16
|
+
returnFullResponse: true,
|
|
17
|
+
ignoreHttpStatusErrors: true,
|
|
18
|
+
};
|
|
19
|
+
let responseData;
|
|
20
|
+
try {
|
|
21
|
+
responseData = await hook.helpers.httpRequestWithAuthentication.call(hook, 'gotoHumanApi', requestOptions);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
throw new n8n_workflow_1.NodeApiError(hook.getNode(), error);
|
|
25
|
+
}
|
|
26
|
+
const statusCode = (responseData === null || responseData === void 0 ? void 0 : responseData.statusCode) || 200;
|
|
27
|
+
if (String(statusCode).startsWith('4') || String(statusCode).startsWith('5')) {
|
|
28
|
+
const body = responseData.body;
|
|
29
|
+
let message;
|
|
30
|
+
if (typeof body === 'object' && body !== null && typeof body.error === 'string') {
|
|
31
|
+
message = body.error;
|
|
32
|
+
}
|
|
33
|
+
else if (typeof body === 'string') {
|
|
34
|
+
message = body;
|
|
35
|
+
}
|
|
36
|
+
else if (body !== undefined) {
|
|
37
|
+
message = JSON.stringify(body);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
message = JSON.stringify(responseData);
|
|
41
|
+
}
|
|
42
|
+
throw new n8n_workflow_1.NodeApiError(hook.getNode(), responseData, {
|
|
43
|
+
message,
|
|
44
|
+
httpCode: String(statusCode),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return ((_a = responseData.body) !== null && _a !== void 0 ? _a : responseData);
|
|
48
|
+
}
|
|
49
|
+
function getTriggerOn(hook) {
|
|
50
|
+
return hook.getNodeParameter('triggerOn') || 'onReviewCompletion';
|
|
51
|
+
}
|
|
52
|
+
function isAgentWebhookTrigger(hook) {
|
|
53
|
+
return getTriggerOn(hook) === 'onAgentMessageOrToolResult';
|
|
54
|
+
}
|
|
55
|
+
function getWebhookFormId(hook) {
|
|
56
|
+
const triggerOn = getTriggerOn(hook);
|
|
57
|
+
const paramName = triggerOn === 'onTriggerFormSubmission' ? 'triggerFormID' : 'reviewTemplateID';
|
|
58
|
+
const formObj = hook.getNodeParameter(paramName);
|
|
59
|
+
return formObj.value;
|
|
60
|
+
}
|
|
61
|
+
function getWebhookAgentId(hook) {
|
|
62
|
+
const agentObj = hook.getNodeParameter('agentID');
|
|
63
|
+
return agentObj.value;
|
|
64
|
+
}
|
|
65
|
+
async function fetchN8nFormsListSearch(filter, query) {
|
|
66
|
+
const queryString = (query === null || query === void 0 ? void 0 : query.onlyTriggerForms) ? '?onlyTriggerForms=true' : '';
|
|
67
|
+
const options = {
|
|
68
|
+
method: 'GET',
|
|
69
|
+
url: `${exports.BASE_URL}/fetchN8nForms${queryString}`,
|
|
70
|
+
json: true,
|
|
71
|
+
};
|
|
72
|
+
const response = await this.helpers.httpRequestWithAuthentication.call(this, 'gotoHumanApi', options);
|
|
73
|
+
if (response === undefined) {
|
|
74
|
+
const emptyLabel = (query === null || query === void 0 ? void 0 : query.onlyTriggerForms)
|
|
75
|
+
? 'No trigger forms found. Please create one first in our web app.'
|
|
76
|
+
: 'No review templates found. Please create one first in our web app.';
|
|
77
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), emptyLabel);
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
results: ((response === null || response === void 0 ? void 0 : response.forms) || [])
|
|
81
|
+
.filter((form) => !filter || form.label.toLowerCase().includes(filter.toLowerCase()))
|
|
82
|
+
.map((form) => ({
|
|
83
|
+
name: form.label,
|
|
84
|
+
value: form.value,
|
|
85
|
+
})),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
async function fetchN8nAgentsListSearch(filter) {
|
|
89
|
+
const options = {
|
|
90
|
+
method: 'GET',
|
|
91
|
+
url: `${exports.BASE_URL}/fetchN8nAgents`,
|
|
92
|
+
json: true,
|
|
93
|
+
};
|
|
94
|
+
const response = await this.helpers.httpRequestWithAuthentication.call(this, 'gotoHumanApi', options);
|
|
95
|
+
if (response === undefined) {
|
|
96
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'No agents found. Please create one first in our web app.');
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
results: ((response === null || response === void 0 ? void 0 : response.agents) || [])
|
|
100
|
+
.filter((agent) => !filter || agent.label.toLowerCase().includes(filter.toLowerCase()))
|
|
101
|
+
.map((agent) => ({
|
|
102
|
+
name: agent.label,
|
|
103
|
+
value: agent.value,
|
|
104
|
+
})),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
6
107
|
exports.gotoHumanWebhookMethods = {
|
|
7
108
|
default: {
|
|
8
109
|
async checkExists() {
|
|
9
110
|
const webhookUrl = this.getNodeWebhookUrl('default');
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
111
|
+
if (isAgentWebhookTrigger(this)) {
|
|
112
|
+
const agentId = getWebhookAgentId(this);
|
|
113
|
+
const response = await gotoHumanHookRequest(this, {
|
|
114
|
+
method: 'POST',
|
|
115
|
+
url: `${exports.BASE_URL}/checkAgentWebhook`,
|
|
116
|
+
body: { agentId, webhookUrl },
|
|
117
|
+
json: true,
|
|
118
|
+
});
|
|
119
|
+
return response.exists === true;
|
|
120
|
+
}
|
|
121
|
+
const formId = getWebhookFormId(this);
|
|
122
|
+
const response = await gotoHumanHookRequest(this, {
|
|
13
123
|
method: 'POST',
|
|
14
124
|
url: `${exports.BASE_URL}/checkWebhook`,
|
|
15
125
|
body: { formId, webhookUrl },
|
|
16
126
|
json: true,
|
|
17
|
-
};
|
|
18
|
-
const response = await this.helpers.httpRequestWithAuthentication.call(this, 'gotoHumanApi', options);
|
|
127
|
+
});
|
|
19
128
|
return response.exists === true;
|
|
20
129
|
},
|
|
21
130
|
async create() {
|
|
22
131
|
const webhookUrl = this.getNodeWebhookUrl('default');
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
132
|
+
if (isAgentWebhookTrigger(this)) {
|
|
133
|
+
const agentId = getWebhookAgentId(this);
|
|
134
|
+
const response = await gotoHumanHookRequest(this, {
|
|
135
|
+
method: 'POST',
|
|
136
|
+
url: `${exports.BASE_URL}/createAgentWebhook`,
|
|
137
|
+
body: { agentId, webhookUrl },
|
|
138
|
+
json: true,
|
|
139
|
+
});
|
|
140
|
+
if (response.success) {
|
|
141
|
+
const webhookData = this.getWorkflowStaticData('node');
|
|
142
|
+
webhookData.webhookId = response.webhookId;
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
const formId = getWebhookFormId(this);
|
|
148
|
+
const response = await gotoHumanHookRequest(this, {
|
|
26
149
|
method: 'POST',
|
|
27
150
|
url: `${exports.BASE_URL}/createWebhook`,
|
|
28
151
|
body: { formId, webhookUrl },
|
|
29
152
|
json: true,
|
|
30
|
-
};
|
|
31
|
-
const response = await this.helpers.httpRequestWithAuthentication.call(this, 'gotoHumanApi', options);
|
|
153
|
+
});
|
|
32
154
|
if (response.success) {
|
|
33
155
|
const webhookData = this.getWorkflowStaticData('node');
|
|
34
156
|
webhookData.webhookId = response.webhookId;
|
|
@@ -38,23 +160,27 @@ exports.gotoHumanWebhookMethods = {
|
|
|
38
160
|
},
|
|
39
161
|
async delete() {
|
|
40
162
|
const webhookUrl = this.getNodeWebhookUrl('default');
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
try {
|
|
50
|
-
await this.helpers.httpRequestWithAuthentication.call(this, 'gotoHumanApi', options);
|
|
51
|
-
const webhookData = this.getWorkflowStaticData('node');
|
|
52
|
-
delete webhookData.webhookId;
|
|
53
|
-
return true;
|
|
163
|
+
if (isAgentWebhookTrigger(this)) {
|
|
164
|
+
const agentId = getWebhookAgentId(this);
|
|
165
|
+
await gotoHumanHookRequest(this, {
|
|
166
|
+
method: 'POST',
|
|
167
|
+
url: `${exports.BASE_URL}/deleteAgentWebhook`,
|
|
168
|
+
body: { agentId, webhookUrl },
|
|
169
|
+
json: true,
|
|
170
|
+
});
|
|
54
171
|
}
|
|
55
|
-
|
|
56
|
-
|
|
172
|
+
else {
|
|
173
|
+
const formId = getWebhookFormId(this);
|
|
174
|
+
await gotoHumanHookRequest(this, {
|
|
175
|
+
method: 'POST',
|
|
176
|
+
url: `${exports.BASE_URL}/deleteWebhook`,
|
|
177
|
+
body: { formId, webhookUrl },
|
|
178
|
+
json: true,
|
|
179
|
+
});
|
|
57
180
|
}
|
|
181
|
+
const webhookData = this.getWorkflowStaticData('node');
|
|
182
|
+
delete webhookData.webhookId;
|
|
183
|
+
return true;
|
|
58
184
|
},
|
|
59
185
|
},
|
|
60
186
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../nodes/GotoHuman/helpers.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../nodes/GotoHuman/helpers.ts"],"names":[],"mappings":"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"}
|