caccl-send-request 2.1.10 → 2.2.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.
@@ -1,5 +1,6 @@
1
1
  declare enum ErrorCode {
2
2
  NotConnected = "CSR1",
3
- SelfSigned = "CSR2"
3
+ SelfSigned = "CSR2",
4
+ NotJSON = "CSR3"
4
5
  }
5
6
  export default ErrorCode;
package/lib/ErrorCode.js CHANGED
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
- // Highest error code: CSR2
2
+ // Highest error code: CSR3
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  var ErrorCode;
5
5
  (function (ErrorCode) {
6
6
  ErrorCode["NotConnected"] = "CSR1";
7
7
  ErrorCode["SelfSigned"] = "CSR2";
8
+ ErrorCode["NotJSON"] = "CSR3";
8
9
  })(ErrorCode || (ErrorCode = {}));
9
10
  ;
10
11
  exports.default = ErrorCode;
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorCode.js","sourceRoot":"","sources":["../src/ErrorCode.ts"],"names":[],"mappings":";AAAA,2BAA2B;;AAE3B,IAAK,SAGJ;AAHD,WAAK,SAAS;IACZ,kCAAqB,CAAA;IACrB,gCAAmB,CAAA;AACrB,CAAC,EAHI,SAAS,KAAT,SAAS,QAGb;AAAA,CAAC;AAEF,kBAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"ErrorCode.js","sourceRoot":"","sources":["../src/ErrorCode.ts"],"names":[],"mappings":";AAAA,2BAA2B;;AAE3B,IAAK,SAIJ;AAJD,WAAK,SAAS;IACZ,kCAAqB,CAAA;IACrB,gCAAmB,CAAA;IACnB,6BAAgB,CAAA;AAClB,CAAC,EAJI,SAAS,KAAT,SAAS,QAIb;AAAA,CAAC;AAEF,kBAAe,SAAS,CAAC"}
package/lib/index.js CHANGED
@@ -25,7 +25,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
25
25
  function verb(n) { return function (v) { return step([n, v]); }; }
26
26
  function step(op) {
27
27
  if (f) throw new TypeError("Generator is already executing.");
28
- while (_) try {
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
29
  if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
30
  if (y = 0, t) op = [op[0] & 2, t.value];
31
31
  switch (op[0]) {
@@ -51,7 +51,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
51
51
  };
52
52
  Object.defineProperty(exports, "__esModule", { value: true });
53
53
  // Import libs
54
- var axios_1 = __importDefault(require("axios"));
55
54
  var qs_1 = __importDefault(require("qs"));
56
55
  // Import other CACCL libs
57
56
  var caccl_error_1 = __importDefault(require("caccl-error"));
@@ -75,7 +74,7 @@ var thisIsDev = (process.env.NODE_ENV === 'development');
75
74
  * @returns { body, status, headers } on success
76
75
  */
77
76
  var sendRequest = function (opts) { return __awaiter(void 0, void 0, void 0, function () {
78
- var sendCrossDomainCredentials, numRetries, method, stringifiedParams, query, url, headers, data, response, err_1;
77
+ var sendCrossDomainCredentials, numRetries, method, stringifiedParams, query, url, headers, data, response, responseHeaders_1, responseBody, jsonErr_1, err_1;
79
78
  var _a;
80
79
  return __generator(this, function (_b) {
81
80
  switch (_b.label) {
@@ -111,35 +110,47 @@ var sendRequest = function (opts) { return __awaiter(void 0, void 0, void 0, fun
111
110
  }
112
111
  _b.label = 1;
113
112
  case 1:
114
- _b.trys.push([1, 3, , 4]);
115
- return [4 /*yield*/, (0, axios_1.default)({
113
+ _b.trys.push([1, 7, , 8]);
114
+ return [4 /*yield*/, fetch(url, {
116
115
  method: method,
117
- url: url,
118
- data: data,
119
- headers: headers,
120
- withCredentials: sendCrossDomainCredentials,
116
+ mode: 'cors',
117
+ headers: headers !== null && headers !== void 0 ? headers : {},
118
+ body: (method !== 'GET'
119
+ ? JSON.stringify(data)
120
+ : undefined),
121
+ credentials: (sendCrossDomainCredentials
122
+ ? 'include'
123
+ : 'same-origin'),
124
+ redirect: 'follow',
125
+ referrerPolicy: (sendCrossDomainCredentials ? 'no-referrer' : 'origin'),
121
126
  })];
122
127
  case 2:
123
128
  response = _b.sent();
124
- // Process response
129
+ responseHeaders_1 = {};
130
+ response.headers.forEach(function (value, key) {
131
+ responseHeaders_1[key] = value;
132
+ });
133
+ _b.label = 3;
134
+ case 3:
135
+ _b.trys.push([3, 5, , 6]);
136
+ return [4 /*yield*/, response.json()];
137
+ case 4:
138
+ responseBody = _b.sent();
125
139
  return [2 /*return*/, {
126
- body: response.data,
140
+ body: responseBody,
127
141
  status: response.status,
128
- headers: response.headers,
142
+ headers: responseHeaders_1,
129
143
  }];
130
- case 3:
144
+ case 5:
145
+ jsonErr_1 = _b.sent();
146
+ // Not JSON
147
+ throw new caccl_error_1.default({
148
+ message: "Response was not valid JSON: ".concat(jsonErr_1 === null || jsonErr_1 === void 0 ? void 0 : jsonErr_1.message),
149
+ code: ErrorCode_1.default.NotJSON,
150
+ });
151
+ case 6: return [3 /*break*/, 8];
152
+ case 7:
131
153
  err_1 = _b.sent();
132
- // Axios throws an error if the request status indicates an error
133
- // sendRequest is supposed to resolve if the request went through, whether
134
- // the status indicates an error or not.
135
- if (err_1.response) {
136
- // Resolve with response
137
- return [2 /*return*/, {
138
- body: err_1.response.data,
139
- status: err_1.response.status,
140
- headers: err_1.response.headers,
141
- }];
142
- }
143
154
  // Request failed! Check if we have more attempts
144
155
  if (numRetries > 0) {
145
156
  // Update opts with one less retry
@@ -154,10 +165,10 @@ var sendRequest = function (opts) { return __awaiter(void 0, void 0, void 0, fun
154
165
  }
155
166
  // No tries left
156
167
  throw new caccl_error_1.default({
157
- message: 'We encountered an error when trying to send a network request. If this issue persists, contact an admin.',
168
+ message: "We encountered an error when trying to send a network request. If this issue persists, contact an admin. Error: ".concat(err_1 === null || err_1 === void 0 ? void 0 : err_1.message),
158
169
  code: ErrorCode_1.default.NotConnected,
159
170
  });
160
- case 4: return [2 /*return*/];
171
+ case 8: return [2 /*return*/];
161
172
  }
162
173
  });
163
174
  }); };
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "caccl-send-request",
3
- "version": "2.1.10",
3
+ "version": "2.2.0",
4
4
  "description": "The default request sender used throughout the CACCL project.",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",
@@ -26,8 +26,7 @@
26
26
  },
27
27
  "homepage": "https://github.com/harvard-edtech/caccl-send-request#readme",
28
28
  "devDependencies": {
29
- "@types/browserify": "^12.0.37",
30
- "@types/node": "^17.0.17",
29
+ "@types/node": "^20.12.4",
31
30
  "@types/qs": "^6.9.7",
32
31
  "eslint": "^8.9.0",
33
32
  "eslint-config-airbnb": "^19.0.4",
@@ -37,8 +36,7 @@
37
36
  "typescript": "^4.5.5"
38
37
  },
39
38
  "dependencies": {
40
- "axios": "^1.6.8",
41
- "caccl-error": "^2.1.10",
39
+ "caccl-error": "^2.2.0",
42
40
  "qs": "^6.9.6"
43
41
  }
44
42
  }
package/src/ErrorCode.ts CHANGED
@@ -1,8 +1,9 @@
1
- // Highest error code: CSR2
1
+ // Highest error code: CSR3
2
2
 
3
3
  enum ErrorCode {
4
4
  NotConnected = 'CSR1',
5
5
  SelfSigned = 'CSR2',
6
+ NotJSON = 'CSR3',
6
7
  };
7
8
 
8
9
  export default ErrorCode;
package/src/index.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  // Import libs
2
- import axios from 'axios';
3
2
  import qs from 'qs';
4
3
 
5
4
  // Import other CACCL libs
@@ -85,33 +84,51 @@ const sendRequest = async (
85
84
 
86
85
  // Send request
87
86
  try {
88
- const response = await axios({
89
- method,
87
+ const response = await fetch(
90
88
  url,
91
- data,
92
- headers,
93
- withCredentials: sendCrossDomainCredentials,
89
+ {
90
+ method,
91
+ mode: 'cors',
92
+ headers: headers ?? {},
93
+ body: (
94
+ method !== 'GET'
95
+ ? JSON.stringify(data)
96
+ : undefined
97
+ ),
98
+ credentials: (
99
+ sendCrossDomainCredentials
100
+ ? 'include'
101
+ : 'same-origin'
102
+ ),
103
+ redirect: 'follow',
104
+ referrerPolicy: (sendCrossDomainCredentials ? 'no-referrer' : 'origin'),
105
+ },
106
+ );
107
+
108
+ // Get headers map
109
+ const responseHeaders: {
110
+ [k in string]: string
111
+ } = {};
112
+ response.headers.forEach((value, key) => {
113
+ responseHeaders[key] = value;
94
114
  });
95
115
 
96
- // Process response
97
- return {
98
- body: response.data,
99
- status: response.status,
100
- headers: response.headers,
101
- };
102
- } catch (err) {
103
- // Axios throws an error if the request status indicates an error
104
- // sendRequest is supposed to resolve if the request went through, whether
105
- // the status indicates an error or not.
106
- if (err.response) {
107
- // Resolve with response
116
+ // Process json response
117
+ try {
118
+ const responseBody = await response.json();
108
119
  return {
109
- body: err.response.data,
110
- status: err.response.status,
111
- headers: err.response.headers,
120
+ body: responseBody,
121
+ status: response.status,
122
+ headers: responseHeaders,
112
123
  };
124
+ } catch (jsonErr) {
125
+ // Not JSON
126
+ throw new CACCLError({
127
+ message: `Response was not valid JSON: ${(jsonErr as any)?.message}`,
128
+ code: ErrorCode.NotJSON,
129
+ });
113
130
  }
114
-
131
+ } catch (err) {
115
132
  // Request failed! Check if we have more attempts
116
133
  if (numRetries > 0) {
117
134
  // Update opts with one less retry
@@ -131,7 +148,7 @@ const sendRequest = async (
131
148
 
132
149
  // No tries left
133
150
  throw new CACCLError({
134
- message: 'We encountered an error when trying to send a network request. If this issue persists, contact an admin.',
151
+ message: `We encountered an error when trying to send a network request. If this issue persists, contact an admin. Error: ${(err as any)?.message}`,
135
152
  code: ErrorCode.NotConnected,
136
153
  });
137
154
  }