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.
- package/lib/ErrorCode.d.ts +2 -1
- package/lib/ErrorCode.js +2 -1
- package/lib/ErrorCode.js.map +1 -1
- package/lib/index.js +37 -26
- package/lib/index.js.map +1 -1
- package/package.json +3 -5
- package/src/ErrorCode.ts +2 -1
- package/src/index.ts +40 -23
package/lib/ErrorCode.d.ts
CHANGED
package/lib/ErrorCode.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// Highest error code:
|
|
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;
|
package/lib/ErrorCode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorCode.js","sourceRoot":"","sources":["../src/ErrorCode.ts"],"names":[],"mappings":";AAAA,2BAA2B;;AAE3B,IAAK,
|
|
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,
|
|
115
|
-
return [4 /*yield*/, (
|
|
113
|
+
_b.trys.push([1, 7, , 8]);
|
|
114
|
+
return [4 /*yield*/, fetch(url, {
|
|
116
115
|
method: method,
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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
|
-
|
|
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:
|
|
140
|
+
body: responseBody,
|
|
127
141
|
status: response.status,
|
|
128
|
-
headers:
|
|
142
|
+
headers: responseHeaders_1,
|
|
129
143
|
}];
|
|
130
|
-
case
|
|
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:
|
|
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
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc;AACd,
|
|
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.
|
|
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/
|
|
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
|
-
"
|
|
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
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
|
|
89
|
-
method,
|
|
87
|
+
const response = await fetch(
|
|
90
88
|
url,
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
-
|
|
98
|
-
|
|
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:
|
|
110
|
-
status:
|
|
111
|
-
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:
|
|
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
|
}
|