@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 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(err => reject(err));
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
- // if the response class type is AxiosError, scrub config fields containing sensitive data
12
- if (error instanceof AxiosError) {
13
- delete error.config.headers;
14
- delete error.config.proxy;
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(error);
20
+ return Promise.reject(safeError);
17
21
  },
18
22
  );
19
23
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@envoy/envoy-integrations-sdk",
3
- "version": "1.3.2",
3
+ "version": "1.3.4",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -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.headers).toBeDefined();
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.headers).toBeUndefined();
47
- expect(error.config.proxy).toBeUndefined();
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');