@envoy/envoy-integrations-sdk 1.3.2 → 1.3.4
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/lib/EnvoyAPI.js +66 -1
- package/lib/axios.js +9 -5
- package/package.json +1 -1
- package/test/axios.test.js +8 -5
package/lib/EnvoyAPI.js
CHANGED
|
@@ -74,6 +74,8 @@ class EnvoyAPI {
|
|
|
74
74
|
},
|
|
75
75
|
include: 'location',
|
|
76
76
|
},
|
|
77
|
+
}).catch((error) => {
|
|
78
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
77
79
|
});
|
|
78
80
|
|
|
79
81
|
return EnvoyAPI.getDataFromBody(body, data => Array.isArray(data));
|
|
@@ -83,6 +85,8 @@ class EnvoyAPI {
|
|
|
83
85
|
|
|
84
86
|
const body = await this.request({
|
|
85
87
|
url: `/api/v3/flows/${flowId}`,
|
|
88
|
+
}).catch((error) => {
|
|
89
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
86
90
|
});
|
|
87
91
|
|
|
88
92
|
return EnvoyAPI.getDataFromBody(body);
|
|
@@ -92,6 +96,8 @@ class EnvoyAPI {
|
|
|
92
96
|
|
|
93
97
|
const body = await this.request({
|
|
94
98
|
url: `/api/v3/locations`,
|
|
99
|
+
}).catch((error) => {
|
|
100
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
95
101
|
});
|
|
96
102
|
|
|
97
103
|
return EnvoyAPI.getDataFromBody(body);
|
|
@@ -101,6 +107,8 @@ class EnvoyAPI {
|
|
|
101
107
|
|
|
102
108
|
const body = await this.request({
|
|
103
109
|
url: `/api/v3/locations/${locationId}`,
|
|
110
|
+
}).catch((error) => {
|
|
111
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
104
112
|
});
|
|
105
113
|
|
|
106
114
|
return EnvoyAPI.getDataFromBody(body);
|
|
@@ -110,6 +118,8 @@ class EnvoyAPI {
|
|
|
110
118
|
|
|
111
119
|
const body = await this.request({
|
|
112
120
|
url: '/api/v2/companies',
|
|
121
|
+
}).catch((error) => {
|
|
122
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
113
123
|
});
|
|
114
124
|
|
|
115
125
|
return EnvoyAPI.getDataFromBody(body);
|
|
@@ -119,6 +129,8 @@ class EnvoyAPI {
|
|
|
119
129
|
|
|
120
130
|
const body = await this.request({
|
|
121
131
|
url: '/api/v2/users/me',
|
|
132
|
+
}).catch((error) => {
|
|
133
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
122
134
|
});
|
|
123
135
|
|
|
124
136
|
return EnvoyAPI.getDataFromBody(body);
|
|
@@ -128,6 +140,8 @@ class EnvoyAPI {
|
|
|
128
140
|
|
|
129
141
|
const body = await this.request({
|
|
130
142
|
url: `/api/v3/users/${userId}/relationships/company-roles`,
|
|
143
|
+
}).catch((error) => {
|
|
144
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
131
145
|
});
|
|
132
146
|
|
|
133
147
|
return EnvoyAPI.getDataFromBody(body, data => Array.isArray(data));
|
|
@@ -137,6 +151,8 @@ class EnvoyAPI {
|
|
|
137
151
|
|
|
138
152
|
const body = await this.request({
|
|
139
153
|
url: `/api/v3/company-roles/${companyRoleId}/employee`,
|
|
154
|
+
}).catch((error) => {
|
|
155
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
140
156
|
});
|
|
141
157
|
|
|
142
158
|
return EnvoyAPI.getDataFromBody(body);
|
|
@@ -154,6 +170,8 @@ class EnvoyAPI {
|
|
|
154
170
|
const body = await this.request({
|
|
155
171
|
url: `/api/v3/locations/${locationId}/employees`,
|
|
156
172
|
qs: params,
|
|
173
|
+
}).catch((error) => {
|
|
174
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
157
175
|
});
|
|
158
176
|
|
|
159
177
|
return EnvoyAPI.getDataFromBody(body, data => Array.isArray(data));
|
|
@@ -169,6 +187,8 @@ class EnvoyAPI {
|
|
|
169
187
|
|
|
170
188
|
const body = await this.request({
|
|
171
189
|
url: `/api/v3/employees/${employeeId}`,
|
|
190
|
+
}).catch((error) => {
|
|
191
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
172
192
|
});
|
|
173
193
|
|
|
174
194
|
return EnvoyAPI.getDataFromBody(body);
|
|
@@ -184,6 +204,8 @@ class EnvoyAPI {
|
|
|
184
204
|
|
|
185
205
|
const body = await this.request({
|
|
186
206
|
url: `/api/v3/flows/${flowId}/badge`,
|
|
207
|
+
}).catch((error) => {
|
|
208
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
187
209
|
});
|
|
188
210
|
|
|
189
211
|
return EnvoyAPI.getDataFromBody(body);
|
|
@@ -199,6 +221,8 @@ class EnvoyAPI {
|
|
|
199
221
|
|
|
200
222
|
const body = await this.request({
|
|
201
223
|
url: `/api/v3/flows/${flowId}/sign-in-field-page`,
|
|
224
|
+
}).catch((error) => {
|
|
225
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
202
226
|
});
|
|
203
227
|
|
|
204
228
|
return EnvoyAPI.getDataFromBody(body);
|
|
@@ -214,6 +238,8 @@ class EnvoyAPI {
|
|
|
214
238
|
|
|
215
239
|
const body = await this.request({
|
|
216
240
|
url: `/api/v3/sign-in-field-pages/${pageId}/sign-in-fields`,
|
|
241
|
+
}).catch((error) => {
|
|
242
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
217
243
|
});
|
|
218
244
|
|
|
219
245
|
return EnvoyAPI.getDataFromBody(body, data => Array.isArray(data));
|
|
@@ -231,6 +257,8 @@ class EnvoyAPI {
|
|
|
231
257
|
method: 'POST',
|
|
232
258
|
url: '/api/v2/platform/notification-events',
|
|
233
259
|
body: event,
|
|
260
|
+
}).catch((error) => {
|
|
261
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
234
262
|
});
|
|
235
263
|
|
|
236
264
|
return EnvoyAPI.getDataFromBody(body);
|
|
@@ -248,6 +276,8 @@ class EnvoyAPI {
|
|
|
248
276
|
method: 'POST',
|
|
249
277
|
url: '/api/v3/invites',
|
|
250
278
|
body: invite,
|
|
279
|
+
}).catch((error) => {
|
|
280
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
251
281
|
});
|
|
252
282
|
|
|
253
283
|
return EnvoyAPI.getDataFromBody(body);
|
|
@@ -268,6 +298,8 @@ class EnvoyAPI {
|
|
|
268
298
|
method: 'PUT',
|
|
269
299
|
url: `/api/v3/invites/${inviteId}`,
|
|
270
300
|
body: invite,
|
|
301
|
+
}).catch((error) => {
|
|
302
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
271
303
|
});
|
|
272
304
|
|
|
273
305
|
return EnvoyAPI.getDataFromBody(body);
|
|
@@ -288,6 +320,8 @@ class EnvoyAPI {
|
|
|
288
320
|
method: 'PATCH',
|
|
289
321
|
url: `/api/v3/invites/${inviteId}`,
|
|
290
322
|
body: invite,
|
|
323
|
+
}).catch((error) => {
|
|
324
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
291
325
|
});
|
|
292
326
|
|
|
293
327
|
return EnvoyAPI.getDataFromBody(body);
|
|
@@ -303,6 +337,8 @@ class EnvoyAPI {
|
|
|
303
337
|
return this.request({
|
|
304
338
|
method: 'DELETE',
|
|
305
339
|
url: `/api/v3/invites/${inviteId}`,
|
|
340
|
+
}).catch((error) => {
|
|
341
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
306
342
|
});
|
|
307
343
|
}
|
|
308
344
|
|
|
@@ -319,6 +355,8 @@ class EnvoyAPI {
|
|
|
319
355
|
method: 'PATCH',
|
|
320
356
|
url: `/api/v2/plugin-services/jobs/${jobId}`,
|
|
321
357
|
body: updates,
|
|
358
|
+
}).catch((error) => {
|
|
359
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
322
360
|
});
|
|
323
361
|
|
|
324
362
|
return EnvoyAPI.getDataFromBody(body);
|
|
@@ -336,7 +374,9 @@ class EnvoyAPI {
|
|
|
336
374
|
method: 'GET',
|
|
337
375
|
url: `/api/v2/plugin-services/installs/${installId}/config`,
|
|
338
376
|
}).then(body => resolve(EnvoyAPI.getDataFromBody(body)))
|
|
339
|
-
.catch(
|
|
377
|
+
.catch((error) => {
|
|
378
|
+
EnvoyAPI.safeRequestsError(error).catch((err) => reject(err));
|
|
379
|
+
});
|
|
340
380
|
});
|
|
341
381
|
}
|
|
342
382
|
|
|
@@ -352,6 +392,8 @@ class EnvoyAPI {
|
|
|
352
392
|
method: 'PUT',
|
|
353
393
|
url: `/api/v2/plugin-services/installs/${installId}/config`,
|
|
354
394
|
body: config,
|
|
395
|
+
}).catch((error) => {
|
|
396
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
355
397
|
});
|
|
356
398
|
|
|
357
399
|
return EnvoyAPI.getDataFromBody(body);
|
|
@@ -374,6 +416,8 @@ class EnvoyAPI {
|
|
|
374
416
|
method: 'POST',
|
|
375
417
|
url: '/api/v2/plugin-services/storage',
|
|
376
418
|
body: request,
|
|
419
|
+
}).catch((error) => {
|
|
420
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
377
421
|
});
|
|
378
422
|
|
|
379
423
|
return EnvoyAPI.getDataFromBody(body, data => Array.isArray(data));
|
|
@@ -384,6 +428,8 @@ class EnvoyAPI {
|
|
|
384
428
|
method: 'POST',
|
|
385
429
|
url: `/api/v2/plugin-services/installs/${installId}/notifications`,
|
|
386
430
|
body: params,
|
|
431
|
+
}).catch((error) => {
|
|
432
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
387
433
|
});
|
|
388
434
|
return EnvoyAPI.getDataFromBody(body);
|
|
389
435
|
}
|
|
@@ -424,6 +470,8 @@ class EnvoyAPI {
|
|
|
424
470
|
},
|
|
425
471
|
url: '/a/auth/v0/token',
|
|
426
472
|
baseUrl,
|
|
473
|
+
}).catch((error) => {
|
|
474
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
427
475
|
});
|
|
428
476
|
}
|
|
429
477
|
|
|
@@ -449,6 +497,8 @@ class EnvoyAPI {
|
|
|
449
497
|
},
|
|
450
498
|
url: '/a/auth/v0/token',
|
|
451
499
|
baseUrl,
|
|
500
|
+
}).catch((error) => {
|
|
501
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
452
502
|
});
|
|
453
503
|
}
|
|
454
504
|
|
|
@@ -471,8 +521,23 @@ class EnvoyAPI {
|
|
|
471
521
|
},
|
|
472
522
|
url: '/a/auth/v0/token',
|
|
473
523
|
baseUrl,
|
|
524
|
+
}).catch((error) => {
|
|
525
|
+
return EnvoyAPI.safeRequestsError(error);
|
|
474
526
|
});
|
|
475
527
|
}
|
|
528
|
+
|
|
529
|
+
static safeRequestsError(error) {
|
|
530
|
+
const safeError = {
|
|
531
|
+
code: error.code ?? error.statusCode,
|
|
532
|
+
message: error.message,
|
|
533
|
+
name: error.name,
|
|
534
|
+
baseURL: error.request?.baseURL ?? error.options?.baseURL,
|
|
535
|
+
url: error.request?.url ?? error.options?.url,
|
|
536
|
+
method: error.request?.method ?? error.options?.method,
|
|
537
|
+
stack: error.stack,
|
|
538
|
+
}
|
|
539
|
+
return Promise.reject(safeError)
|
|
540
|
+
}
|
|
476
541
|
}
|
|
477
542
|
|
|
478
543
|
module.exports = EnvoyAPI;
|
package/lib/axios.js
CHANGED
|
@@ -8,12 +8,16 @@ function createAxiosClient(config) {
|
|
|
8
8
|
return response
|
|
9
9
|
},
|
|
10
10
|
(error) => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
const safeError = {
|
|
12
|
+
code: error.code,
|
|
13
|
+
message: error.message,
|
|
14
|
+
name: error.name,
|
|
15
|
+
baseURL: error.request?.baseURL ?? error.config?.baseURL,
|
|
16
|
+
url: error.request?.url ?? error.config?.url,
|
|
17
|
+
method: error.request?.method ?? error.config?.method,
|
|
18
|
+
stack: error.stack,
|
|
15
19
|
}
|
|
16
|
-
return Promise.reject(
|
|
20
|
+
return Promise.reject(safeError);
|
|
17
21
|
},
|
|
18
22
|
);
|
|
19
23
|
|
package/package.json
CHANGED
package/test/axios.test.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const axios = require('axios');
|
|
2
|
-
const createClient = require('../lib/axios')
|
|
2
|
+
const createClient = require('../lib/axios');
|
|
3
3
|
|
|
4
4
|
describe('axios', () => {
|
|
5
5
|
it('default client should leak credentials in AxiosError', async () => {
|
|
@@ -18,8 +18,7 @@ describe('axios', () => {
|
|
|
18
18
|
try {
|
|
19
19
|
await client.get('http://localhost:3000/axios-error');
|
|
20
20
|
} catch (error) {
|
|
21
|
-
expect(error.config
|
|
22
|
-
expect(error.config.proxy).toBeDefined();
|
|
21
|
+
expect(error.config).toBeDefined();
|
|
23
22
|
const errorStr = JSON.stringify(error);
|
|
24
23
|
expect(errorStr).toContain('Bearer 1234');
|
|
25
24
|
expect(errorStr).toContain('myWhackyUsername');
|
|
@@ -43,8 +42,12 @@ describe('axios', () => {
|
|
|
43
42
|
try {
|
|
44
43
|
await client.get('http://localhost:3000/axios-error');
|
|
45
44
|
} catch (error) {
|
|
46
|
-
expect(error.config
|
|
47
|
-
expect(error.
|
|
45
|
+
expect(error.config).toBeUndefined();
|
|
46
|
+
expect(error.code).toBe('ECONNREFUSED');
|
|
47
|
+
expect(error.message).toBe('connect ECONNREFUSED 127.0.0.1:80');
|
|
48
|
+
expect(error.name).toBe('Error');
|
|
49
|
+
expect(error.url).toBe('http://localhost:3000/axios-error');
|
|
50
|
+
expect(error.method).toBe('get');
|
|
48
51
|
const errorStr = JSON.stringify(error);
|
|
49
52
|
expect(errorStr).not.toContain('Bearer 1234');
|
|
50
53
|
expect(errorStr).not.toContain('myWhackyUsername');
|