n8n-nodes-autotask 0.6.9 → 0.7.1
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/README.md +2 -2
- package/dist/credentials/AutotaskApi.credentials.js +4 -4
- package/dist/credentials/AutotaskApi.credentials.js.map +1 -1
- package/dist/nodes/Autotask/Autotask.node.js +4 -4
- package/dist/nodes/Autotask/constants/api.d.ts +0 -3
- package/dist/nodes/Autotask/constants/api.js +0 -3
- package/dist/nodes/Autotask/constants/api.js.map +1 -1
- package/dist/nodes/Autotask/helpers/errorHandler.d.ts +9 -0
- package/dist/nodes/Autotask/helpers/errorHandler.js +100 -167
- package/dist/nodes/Autotask/helpers/errorHandler.js.map +1 -1
- package/dist/nodes/Autotask/helpers/http/rateLimit.d.ts +2 -2
- package/dist/nodes/Autotask/helpers/http/rateLimit.js +15 -10
- package/dist/nodes/Autotask/helpers/http/rateLimit.js.map +1 -1
- package/dist/nodes/Autotask/helpers/http/request.js +143 -122
- package/dist/nodes/Autotask/helpers/http/request.js.map +1 -1
- package/dist/nodes/Autotask/helpers/webhook/resources.js +1 -1
- package/dist/nodes/Autotask/helpers/webhook/resources.js.map +1 -1
- package/dist/nodes/Autotask/types/base/auth.d.ts +1 -0
- package/dist/nodes/Autotask/types/base/errors.d.ts +21 -0
- package/dist/nodes/Autotask/types/base/errors.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -13
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# n8n-nodes-autotask
|
|
2
2
|
|
|
3
|
-

|
|
4
4
|

|
|
5
5
|
|
|
6
6
|
> **IMPORTANT**: After updating this node to a new version, a restart of your n8n instance is highly recommended to ensure all changes are properly applied.
|
|
@@ -487,4 +487,4 @@ Bug reports should be submitted via GitHub at: https://github.com/msoukhomlinov/
|
|
|
487
487
|
|
|
488
488
|
## License
|
|
489
489
|
|
|
490
|
-
[MIT](LICENSE)
|
|
490
|
+
[MIT](LICENSE)
|
|
@@ -132,26 +132,26 @@ class AutotaskApi {
|
|
|
132
132
|
value: 'https://webservices12.autotask.net/atservicesrest',
|
|
133
133
|
},
|
|
134
134
|
{
|
|
135
|
-
name: 'Other (
|
|
135
|
+
name: 'Other (Custom URL)',
|
|
136
136
|
value: 'other',
|
|
137
137
|
},
|
|
138
138
|
],
|
|
139
139
|
default: 'https://webservices6.autotask.net/atservicesrest',
|
|
140
140
|
required: true,
|
|
141
|
-
description: 'Select your Autotask instance zone. If unsure, use "Other"
|
|
141
|
+
description: 'Select your Autotask instance zone. If unsure, use "Other" to specify a custom URL. Zone list sourced from: https://ww6.autotask.net/help/developerhelp/Content/APIs/General/API_Zones.htm',
|
|
142
142
|
},
|
|
143
143
|
{
|
|
144
144
|
displayName: 'Custom Zone URL',
|
|
145
145
|
name: 'customZoneUrl',
|
|
146
146
|
type: 'string',
|
|
147
|
-
default: '
|
|
147
|
+
default: '',
|
|
148
148
|
required: true,
|
|
149
149
|
displayOptions: {
|
|
150
150
|
show: {
|
|
151
151
|
zone: ['other'],
|
|
152
152
|
},
|
|
153
153
|
},
|
|
154
|
-
description: 'Enter your custom Autotask zone URL. You can
|
|
154
|
+
description: 'Enter your custom Autotask zone URL. You can get this information from your Autotask administrator.',
|
|
155
155
|
},
|
|
156
156
|
{
|
|
157
157
|
displayName: 'Timezone',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutotaskApi.credentials.js","sourceRoot":"","sources":["../../credentials/AutotaskApi.credentials.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"AutotaskApi.credentials.js","sourceRoot":"","sources":["../../credentials/AutotaskApi.credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -280,10 +280,10 @@ class Autotask {
|
|
|
280
280
|
const udfFields = fields.filter(field => field.id.startsWith('UDF') || 'isUdf' in field && field.isUdf === true);
|
|
281
281
|
const picklistFields = fields.filter(field => 'isPickList' in field && field.isPickList === true);
|
|
282
282
|
const udfPicklistFields = udfFields.filter(field => 'isPickList' in field && field.isPickList === true);
|
|
283
|
-
console.debug(`[getSelectColumns] Field breakdown for ${resource}:
|
|
284
|
-
- Total fields: ${fields.length}
|
|
285
|
-
- UDF fields: ${udfFields.length}
|
|
286
|
-
- Picklist fields: ${picklistFields.length}
|
|
283
|
+
console.debug(`[getSelectColumns] Field breakdown for ${resource}:
|
|
284
|
+
- Total fields: ${fields.length}
|
|
285
|
+
- UDF fields: ${udfFields.length}
|
|
286
|
+
- Picklist fields: ${picklistFields.length}
|
|
287
287
|
- UDF Picklist fields: ${udfPicklistFields.length}`);
|
|
288
288
|
if (udfPicklistFields.length > 0) {
|
|
289
289
|
console.debug('[getSelectColumns] First few UDF picklist fields:', udfPicklistFields.slice(0, 3).map(f => ({
|
|
@@ -12,9 +12,6 @@ export declare const API_CONSTANTS: {
|
|
|
12
12
|
readonly MAX_UDF_PER_QUERY: 1;
|
|
13
13
|
readonly MAX_GET_LENGTH: 2048;
|
|
14
14
|
readonly MAX_REQUESTS_PER_HOUR: 10000;
|
|
15
|
-
readonly MAX_RETRIES: 3;
|
|
16
|
-
readonly BASE_BACKOFF_DELAY: 1000;
|
|
17
|
-
readonly MAX_BACKOFF_DELAY: 30000;
|
|
18
15
|
};
|
|
19
16
|
export declare const PAGINATION: {
|
|
20
17
|
readonly MAX_PAGE_SIZE: 500;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../nodes/Autotask/constants/api.ts"],"names":[],"mappings":";;;AAKa,QAAA,WAAW,GAAG;IAE1B,OAAO,EAAE,MAAM;CACN,CAAC;AAGE,QAAA,aAAa,GAAG;IAE5B,cAAc,EAAE,GAAG;IAEnB,aAAa,EAAE,GAAG;IAElB,gBAAgB,EAAE,IAAI;IAEtB,gBAAgB,EAAE,GAAG;IAErB,sBAAsB,EAAE,IAAI;IAE5B,uBAAuB,EAAE,EAAE;IAE3B,iBAAiB,EAAE,GAAG;IAEtB,iBAAiB,EAAE,CAAC;IAEpB,cAAc,EAAE,IAAI;IAEpB,qBAAqB,EAAE,KAAK;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../nodes/Autotask/constants/api.ts"],"names":[],"mappings":";;;AAKa,QAAA,WAAW,GAAG;IAE1B,OAAO,EAAE,MAAM;CACN,CAAC;AAGE,QAAA,aAAa,GAAG;IAE5B,cAAc,EAAE,GAAG;IAEnB,aAAa,EAAE,GAAG;IAElB,gBAAgB,EAAE,IAAI;IAEtB,gBAAgB,EAAE,GAAG;IAErB,sBAAsB,EAAE,IAAI;IAE5B,uBAAuB,EAAE,EAAE;IAE3B,iBAAiB,EAAE,GAAG;IAEtB,iBAAiB,EAAE,CAAC;IAEpB,cAAc,EAAE,IAAI;IAEpB,qBAAqB,EAAE,KAAK;CACnB,CAAC;AAGE,QAAA,UAAU,GAAG;IAEzB,aAAa,EAAE,GAAG;IAElB,aAAa,EAAE,CAAC;IAEhB,iBAAiB,EAAE,EAAE;IAErB,SAAS,EAAE,EAAE;CACJ,CAAC;AAGE,QAAA,gBAAgB,GAAG;IAE/B,EAAE,EAAE,IAAI;IAER,KAAK,EAAE,OAAO;IAEd,EAAE,EAAE,IAAI;IAER,GAAG,EAAE,KAAK;IAEV,EAAE,EAAE,IAAI;IAER,GAAG,EAAE,KAAK;IAEV,UAAU,EAAE,YAAY;IAExB,QAAQ,EAAE,UAAU;IAEpB,QAAQ,EAAE,UAAU;IAEpB,KAAK,EAAE,OAAO;IAEd,QAAQ,EAAE,UAAU;IAEpB,EAAE,EAAE,IAAI;IAER,KAAK,EAAE,OAAO;CACL,CAAC;AAGE,QAAA,gBAAgB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAG3D,QAAA,eAAe,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AAGvD,QAAA,eAAe,GAAG;IAC9B,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;CACL,CAAC;AAGE,QAAA,cAAc,GAAG;IAC7B,kBAAkB,EAAE,mBAAmB;IACvC,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,mBAAmB;CACtB,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { IExecuteFunctions, ILoadOptionsFunctions, IHookFunctions } from 'n8n-workflow';
|
|
2
|
+
import type { IApiErrorWithResponse } from '../types/base/api';
|
|
3
|
+
import type { IAutotaskError } from '../types/base/errors';
|
|
2
4
|
export declare enum AutotaskErrorType {
|
|
3
5
|
Authentication = "AuthenticationError_401",
|
|
4
6
|
Authorization = "AuthorizationError_403",
|
|
@@ -15,6 +17,13 @@ export declare enum AutotaskErrorType {
|
|
|
15
17
|
ParseError = "ParseError",
|
|
16
18
|
Unknown = "UnknownError"
|
|
17
19
|
}
|
|
20
|
+
export declare function createStandardErrorObject(error: Error | IApiErrorWithResponse, context: {
|
|
21
|
+
url: string;
|
|
22
|
+
method: string;
|
|
23
|
+
status?: number;
|
|
24
|
+
operation?: string;
|
|
25
|
+
entityType?: string;
|
|
26
|
+
}): IAutotaskError;
|
|
18
27
|
export declare function handleErrors<T>(context: IExecuteFunctions | ILoadOptionsFunctions | IHookFunctions | undefined, operation: () => Promise<T>, metadata?: {
|
|
19
28
|
operation?: string;
|
|
20
29
|
entityType?: string;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AutotaskErrorType = void 0;
|
|
4
|
+
exports.createStandardErrorObject = createStandardErrorObject;
|
|
4
5
|
exports.handleErrors = handleErrors;
|
|
5
6
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
6
7
|
var AutotaskErrorType;
|
|
@@ -23,196 +24,128 @@ var AutotaskErrorType;
|
|
|
23
24
|
function formatErrorDetails(errors) {
|
|
24
25
|
if (!(errors === null || errors === void 0 ? void 0 : errors.length))
|
|
25
26
|
return '';
|
|
26
|
-
return errors.map(e =>
|
|
27
|
+
return errors.map(e => {
|
|
28
|
+
let message = e.message || 'Unknown error';
|
|
29
|
+
if (e.field) {
|
|
30
|
+
message = `Field '${e.field}': ${message}`;
|
|
31
|
+
}
|
|
32
|
+
if (e.code) {
|
|
33
|
+
message = `[${e.code}] ${message}`;
|
|
34
|
+
}
|
|
35
|
+
return message;
|
|
36
|
+
}).join(' | ');
|
|
37
|
+
}
|
|
38
|
+
function getErrorTypeByContext(status, message, errors) {
|
|
39
|
+
if (message) {
|
|
40
|
+
if (message.includes('[NotFoundError]') ||
|
|
41
|
+
message.toLowerCase().includes('not found') ||
|
|
42
|
+
(message.includes('item') && message.includes('null'))) {
|
|
43
|
+
return AutotaskErrorType.NotFound;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (!status)
|
|
47
|
+
return AutotaskErrorType.Unknown;
|
|
48
|
+
const statusErrorMap = {
|
|
49
|
+
400: AutotaskErrorType.BadRequest,
|
|
50
|
+
401: AutotaskErrorType.Authentication,
|
|
51
|
+
403: AutotaskErrorType.Authorization,
|
|
52
|
+
404: AutotaskErrorType.NotFound,
|
|
53
|
+
409: AutotaskErrorType.Conflict,
|
|
54
|
+
422: AutotaskErrorType.Validation,
|
|
55
|
+
429: AutotaskErrorType.TooManyRequests,
|
|
56
|
+
500: AutotaskErrorType.InternalServer,
|
|
57
|
+
503: AutotaskErrorType.ServiceUnavailable,
|
|
58
|
+
504: AutotaskErrorType.GatewayTimeout,
|
|
59
|
+
};
|
|
60
|
+
if (statusErrorMap[status])
|
|
61
|
+
return statusErrorMap[status];
|
|
62
|
+
if (status >= 400 && status < 500)
|
|
63
|
+
return AutotaskErrorType.BadRequest;
|
|
64
|
+
if (status >= 500)
|
|
65
|
+
return AutotaskErrorType.InternalServer;
|
|
66
|
+
return AutotaskErrorType.Unknown;
|
|
27
67
|
}
|
|
28
68
|
function getErrorContext(error, operation, entityType) {
|
|
29
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
30
69
|
if (!error) {
|
|
31
70
|
return {
|
|
32
71
|
type: AutotaskErrorType.Unknown,
|
|
33
72
|
details: 'An unknown error occurred (no error provided)',
|
|
34
73
|
};
|
|
35
74
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
75
|
+
let details = '';
|
|
76
|
+
let statusCode;
|
|
77
|
+
let specificErrors = [];
|
|
78
|
+
if ('response' in error && error.response) {
|
|
79
|
+
statusCode = error.response.status;
|
|
80
|
+
if (error.response.data && Array.isArray(error.response.data.errors) && error.response.data.errors.length > 0) {
|
|
81
|
+
specificErrors = error.response.data.errors;
|
|
82
|
+
details = formatErrorDetails(specificErrors);
|
|
44
83
|
}
|
|
45
84
|
}
|
|
46
|
-
if (
|
|
47
|
-
|
|
48
|
-
if (((_b = error.response) === null || _b === void 0 ? void 0 : _b.data) && 'errors' in error.response.data) {
|
|
49
|
-
const errorData = error.response.data;
|
|
50
|
-
if (Array.isArray(errorData.errors) && errorData.errors.length > 0) {
|
|
51
|
-
const errorDetails = errorData.errors.map((e) => {
|
|
52
|
-
let message = e.message || 'Unknown error';
|
|
53
|
-
if (e.field) {
|
|
54
|
-
message = `Field '${e.field}': ${message}`;
|
|
55
|
-
}
|
|
56
|
-
if (e.code) {
|
|
57
|
-
message = `[${e.code}] ${message}`;
|
|
58
|
-
}
|
|
59
|
-
return message;
|
|
60
|
-
}).join(' | ');
|
|
61
|
-
const errorContext = {
|
|
62
|
-
type: getErrorTypeByStatus(status),
|
|
63
|
-
statusCode: status,
|
|
64
|
-
details: errorDetails || formatErrorDetails(errorData.errors) || 'API error occurred',
|
|
65
|
-
};
|
|
66
|
-
return errorContext;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
switch (status) {
|
|
70
|
-
case 400:
|
|
71
|
-
return {
|
|
72
|
-
type: AutotaskErrorType.BadRequest,
|
|
73
|
-
statusCode: status,
|
|
74
|
-
details: formatErrorDetails((_d = (_c = error.response) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.errors) || 'Invalid request format or parameters',
|
|
75
|
-
};
|
|
76
|
-
case 401:
|
|
77
|
-
return {
|
|
78
|
-
type: AutotaskErrorType.Authentication,
|
|
79
|
-
statusCode: status,
|
|
80
|
-
details: 'Authentication failed: Invalid credentials',
|
|
81
|
-
};
|
|
82
|
-
case 403:
|
|
83
|
-
return {
|
|
84
|
-
type: AutotaskErrorType.Authorization,
|
|
85
|
-
statusCode: status,
|
|
86
|
-
details: 'Authorization failed: Insufficient permissions',
|
|
87
|
-
};
|
|
88
|
-
case 404:
|
|
89
|
-
return {
|
|
90
|
-
type: AutotaskErrorType.NotFound,
|
|
91
|
-
statusCode: status,
|
|
92
|
-
details: `Resource not found${entityType ? `: ${entityType}` : ''}`,
|
|
93
|
-
};
|
|
94
|
-
case 409:
|
|
95
|
-
return {
|
|
96
|
-
type: AutotaskErrorType.Conflict,
|
|
97
|
-
statusCode: status,
|
|
98
|
-
details: 'Resource state conflict',
|
|
99
|
-
};
|
|
100
|
-
case 422:
|
|
101
|
-
return {
|
|
102
|
-
type: AutotaskErrorType.Validation,
|
|
103
|
-
statusCode: status,
|
|
104
|
-
details: formatErrorDetails((_f = (_e = error.response) === null || _e === void 0 ? void 0 : _e.data) === null || _f === void 0 ? void 0 : _f.errors) || 'Validation error',
|
|
105
|
-
};
|
|
106
|
-
case 429:
|
|
107
|
-
return {
|
|
108
|
-
type: AutotaskErrorType.TooManyRequests,
|
|
109
|
-
statusCode: status,
|
|
110
|
-
details: 'Rate limit exceeded',
|
|
111
|
-
};
|
|
112
|
-
case 500:
|
|
113
|
-
return {
|
|
114
|
-
type: AutotaskErrorType.InternalServer,
|
|
115
|
-
statusCode: status,
|
|
116
|
-
details: 'Internal server error',
|
|
117
|
-
};
|
|
118
|
-
case 503:
|
|
119
|
-
return {
|
|
120
|
-
type: AutotaskErrorType.ServiceUnavailable,
|
|
121
|
-
statusCode: status,
|
|
122
|
-
details: 'Service temporarily unavailable',
|
|
123
|
-
};
|
|
124
|
-
case 504:
|
|
125
|
-
return {
|
|
126
|
-
type: AutotaskErrorType.GatewayTimeout,
|
|
127
|
-
statusCode: status,
|
|
128
|
-
details: 'Gateway timeout',
|
|
129
|
-
};
|
|
130
|
-
default:
|
|
131
|
-
if (status && status >= 400 && status < 500) {
|
|
132
|
-
return {
|
|
133
|
-
type: AutotaskErrorType.BadRequest,
|
|
134
|
-
statusCode: status,
|
|
135
|
-
details: formatErrorDetails((_h = (_g = error.response) === null || _g === void 0 ? void 0 : _g.data) === null || _h === void 0 ? void 0 : _h.errors) || `Client error: ${status}`,
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
if (status && status >= 500) {
|
|
139
|
-
return {
|
|
140
|
-
type: AutotaskErrorType.InternalServer,
|
|
141
|
-
statusCode: status,
|
|
142
|
-
details: `Server error: ${status}`,
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
}
|
|
85
|
+
if (!details && error.message) {
|
|
86
|
+
details = error.message;
|
|
146
87
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
details: error.message || 'Failed to parse API response',
|
|
164
|
-
};
|
|
88
|
+
const type = getErrorTypeByContext(statusCode, error.message, specificErrors);
|
|
89
|
+
return {
|
|
90
|
+
type,
|
|
91
|
+
operation,
|
|
92
|
+
entityType,
|
|
93
|
+
statusCode,
|
|
94
|
+
details: details || 'An error occurred',
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function createStandardErrorObject(error, context) {
|
|
98
|
+
var _a, _b, _c;
|
|
99
|
+
const { url, method, status, operation, entityType } = context;
|
|
100
|
+
let details = [];
|
|
101
|
+
if ('response' in error && ((_b = (_a = error.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.errors)) {
|
|
102
|
+
if (Array.isArray(error.response.data.errors)) {
|
|
103
|
+
details = error.response.data.errors;
|
|
165
104
|
}
|
|
166
105
|
}
|
|
106
|
+
const errorContext = getErrorContext(error, operation, entityType);
|
|
107
|
+
const rawResponse = 'response' in error && ((_c = error.response) === null || _c === void 0 ? void 0 : _c.data)
|
|
108
|
+
? JSON.stringify(error.response.data)
|
|
109
|
+
: undefined;
|
|
167
110
|
return {
|
|
168
|
-
|
|
169
|
-
|
|
111
|
+
statusCode: status,
|
|
112
|
+
message: errorContext.details || error.message || 'Unknown error',
|
|
113
|
+
details,
|
|
114
|
+
context: {
|
|
115
|
+
url,
|
|
116
|
+
method,
|
|
117
|
+
operation,
|
|
118
|
+
entityType,
|
|
119
|
+
errorDetails: details,
|
|
120
|
+
rawResponse
|
|
121
|
+
}
|
|
170
122
|
};
|
|
171
123
|
}
|
|
172
|
-
function getErrorTypeByStatus(status) {
|
|
173
|
-
if (!status)
|
|
174
|
-
return AutotaskErrorType.Unknown;
|
|
175
|
-
if (status === 401)
|
|
176
|
-
return AutotaskErrorType.Authentication;
|
|
177
|
-
if (status === 403)
|
|
178
|
-
return AutotaskErrorType.Authorization;
|
|
179
|
-
if (status === 404)
|
|
180
|
-
return AutotaskErrorType.NotFound;
|
|
181
|
-
if (status === 400)
|
|
182
|
-
return AutotaskErrorType.BadRequest;
|
|
183
|
-
if (status === 422)
|
|
184
|
-
return AutotaskErrorType.Validation;
|
|
185
|
-
if (status === 409)
|
|
186
|
-
return AutotaskErrorType.Conflict;
|
|
187
|
-
if (status === 429)
|
|
188
|
-
return AutotaskErrorType.TooManyRequests;
|
|
189
|
-
if (status === 500)
|
|
190
|
-
return AutotaskErrorType.InternalServer;
|
|
191
|
-
if (status === 503)
|
|
192
|
-
return AutotaskErrorType.ServiceUnavailable;
|
|
193
|
-
if (status === 504)
|
|
194
|
-
return AutotaskErrorType.GatewayTimeout;
|
|
195
|
-
if (status >= 400 && status < 500)
|
|
196
|
-
return AutotaskErrorType.BadRequest;
|
|
197
|
-
if (status >= 500)
|
|
198
|
-
return AutotaskErrorType.InternalServer;
|
|
199
|
-
return AutotaskErrorType.Unknown;
|
|
200
|
-
}
|
|
201
124
|
async function handleErrors(context, operation, metadata) {
|
|
125
|
+
var _a, _b, _c;
|
|
202
126
|
const { operation: opName, entityType } = metadata || {};
|
|
203
127
|
try {
|
|
204
128
|
return await operation();
|
|
205
129
|
}
|
|
206
130
|
catch (error) {
|
|
207
|
-
const
|
|
208
|
-
const
|
|
209
|
-
|
|
210
|
-
|
|
131
|
+
const errorContext = getErrorContext(error, opName, entityType);
|
|
132
|
+
const errorMessage = error.description ||
|
|
133
|
+
error.message ||
|
|
134
|
+
errorContext.details ||
|
|
135
|
+
'An unknown error occurred';
|
|
136
|
+
const apiErrors = ((_b = (_a = error.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.errors) ||
|
|
137
|
+
((_c = error.error) === null || _c === void 0 ? void 0 : _c.errors) ||
|
|
138
|
+
[];
|
|
139
|
+
const formattedApiErrors = Array.isArray(apiErrors) && apiErrors.length > 0
|
|
140
|
+
? apiErrors.map((e) => typeof e === 'string' ? e : e.message).filter(Boolean).join(' | ')
|
|
141
|
+
: '';
|
|
142
|
+
const detailedMessage = errorMessage !== 'An unknown error occurred'
|
|
143
|
+
? errorMessage
|
|
144
|
+
: formattedApiErrors || errorContext.details || 'An unknown error occurred';
|
|
145
|
+
if (context) {
|
|
146
|
+
throw new n8n_workflow_1.NodeOperationError(context.getNode(), detailedMessage, { itemIndex: 0 });
|
|
211
147
|
}
|
|
212
|
-
throw new
|
|
213
|
-
description: errorContext.details,
|
|
214
|
-
message: `[${errorContext.type}] ${opName ? `Operation: ${opName}, ` : ''}${entityType ? `Entity: ${entityType}, ` : ''}${errorContext.details}`,
|
|
215
|
-
});
|
|
148
|
+
throw new Error(`${detailedMessage} [${errorContext.type}]`);
|
|
216
149
|
}
|
|
217
150
|
}
|
|
218
151
|
//# sourceMappingURL=errorHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../../../nodes/Autotask/helpers/errorHandler.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../../../nodes/Autotask/helpers/errorHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,7 +30,7 @@ declare class RequestRateTracker {
|
|
|
30
30
|
currentTimeframeRequestCount: number;
|
|
31
31
|
} | null>): void;
|
|
32
32
|
}
|
|
33
|
-
export declare function
|
|
34
|
-
export declare function handleRateLimit(
|
|
33
|
+
export declare function calculateThrottleDuration(usagePercent: number): number;
|
|
34
|
+
export declare function handleRateLimit(): Promise<void>;
|
|
35
35
|
export declare const rateTracker: RequestRateTracker;
|
|
36
36
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.rateTracker = void 0;
|
|
4
|
-
exports.
|
|
4
|
+
exports.calculateThrottleDuration = calculateThrottleDuration;
|
|
5
5
|
exports.handleRateLimit = handleRateLimit;
|
|
6
6
|
class RequestRateTracker {
|
|
7
7
|
constructor() {
|
|
@@ -146,20 +146,25 @@ class RequestRateTracker {
|
|
|
146
146
|
this.fetchThresholdInfo = fetcher;
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
|
-
function
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
149
|
+
function calculateThrottleDuration(usagePercent) {
|
|
150
|
+
if (usagePercent >= 90) {
|
|
151
|
+
return 5000;
|
|
152
|
+
}
|
|
153
|
+
else if (usagePercent >= 75) {
|
|
154
|
+
return 2000;
|
|
155
|
+
}
|
|
156
|
+
else if (usagePercent >= 50) {
|
|
157
|
+
return 1000;
|
|
158
|
+
}
|
|
159
|
+
return 0;
|
|
154
160
|
}
|
|
155
|
-
async function handleRateLimit(
|
|
161
|
+
async function handleRateLimit() {
|
|
156
162
|
const rateTracker = RequestRateTracker.getInstance();
|
|
157
163
|
const usagePercent = rateTracker.trackRequest();
|
|
158
164
|
if (rateTracker.shouldThrottle()) {
|
|
159
165
|
const baseDelay = rateTracker.getThrottleDuration();
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
await new Promise(resolve => setTimeout(resolve, backoffDelay));
|
|
166
|
+
console.debug(`[RateLimit] Adding throttle delay of ${baseDelay}ms (at limit)`);
|
|
167
|
+
await new Promise(resolve => setTimeout(resolve, baseDelay));
|
|
163
168
|
}
|
|
164
169
|
const throttleDelay = rateTracker.getThrottleDuration();
|
|
165
170
|
if (throttleDelay > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../../../../nodes/Autotask/helpers/http/rateLimit.ts"],"names":[],"mappings":";;;AAyOA,
|
|
1
|
+
{"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../../../../nodes/Autotask/helpers/http/rateLimit.ts"],"names":[],"mappings":"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"}
|