@stackfactor/client-api 1.2.17 → 1.2.19
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/dist/cjs/lib/axiosClient.d.ts.map +1 -1
- package/dist/cjs/lib/axiosClient.js +60 -41
- package/dist/cjs/lib/axiosClient.js.map +1 -1
- package/dist/esm/lib/axiosClient.d.ts.map +1 -1
- package/dist/esm/lib/axiosClient.js +60 -41
- package/dist/esm/lib/axiosClient.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axiosClient.d.ts","sourceRoot":"","sources":["../../../src/lib/axiosClient.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,UAAU,EAAiB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"axiosClient.d.ts","sourceRoot":"","sources":["../../../src/lib/axiosClient.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,UAAU,EAAiB,MAAM,OAAO,CAAC;AAuBzD,eAAO,MAAM,MAAM,+BAGjB,CAAC;AAgEH,eAAO,MAAM,iBAAiB,6EAC8C,CAAC;AA4D7E;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,UAAU,KAAG,MAejD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,UAAU,KAAG,MAIhD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,UAAU,KAChB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAKnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,qBAAqB,OAAO,EAC5B,OAAO,UAAU,KAChB,OAMF,CAAC"}
|
|
@@ -39,6 +39,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
39
|
exports.shouldReturnError = exports.getErrorInformation = exports.getErrorType = exports.errorToString = exports.FORBIDDEN_MESSAGE = exports.client = void 0;
|
|
40
40
|
const axios_1 = __importDefault(require("axios"));
|
|
41
41
|
const constants_js_1 = require("./constants.js");
|
|
42
|
+
const socketError_js_1 = require("./socketError.js");
|
|
42
43
|
const utils = __importStar(require("./utils.js"));
|
|
43
44
|
const baseUrl = utils.getBaseUrl();
|
|
44
45
|
exports.client = axios_1.default.create({
|
|
@@ -62,6 +63,22 @@ const REDACTED_FIELDS = [
|
|
|
62
63
|
//Long values (a pasted document, a base64 blob) would bury the message they are meant
|
|
63
64
|
//to illustrate.
|
|
64
65
|
const MAX_VALUE_LENGTH = 60;
|
|
66
|
+
/**
|
|
67
|
+
* The rejected value as it should appear in a message: null when there is nothing
|
|
68
|
+
* worth showing, cut short when it would bury the message it illustrates.
|
|
69
|
+
*/
|
|
70
|
+
const displayValue = (value) => {
|
|
71
|
+
if (value === null || value === undefined) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
const text = typeof value === "object" ? JSON.stringify(value) : String(value);
|
|
75
|
+
if (text.length === 0) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
return text.length > MAX_VALUE_LENGTH
|
|
79
|
+
? `${text.slice(0, MAX_VALUE_LENGTH)}…`
|
|
80
|
+
: text;
|
|
81
|
+
};
|
|
65
82
|
/**
|
|
66
83
|
* Renders one validation error as a sentence: the server's message, then the field it
|
|
67
84
|
* is about and the value that was rejected.
|
|
@@ -78,20 +95,9 @@ const validationErrorToString = (item) => {
|
|
|
78
95
|
return message;
|
|
79
96
|
}
|
|
80
97
|
const redacted = REDACTED_FIELDS.indexOf(field.toLowerCase()) >= 0;
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
typeof item.value === "object"
|
|
85
|
-
? JSON.stringify(item.value)
|
|
86
|
-
: String(item.value);
|
|
87
|
-
if (value.length === 0) {
|
|
88
|
-
value = null;
|
|
89
|
-
}
|
|
90
|
-
else if (value.length > MAX_VALUE_LENGTH) {
|
|
91
|
-
value = `${value.slice(0, MAX_VALUE_LENGTH)}…`;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return `${message} (${field}${value === null ? "" : `: "${value}"`})`;
|
|
98
|
+
const value = redacted ? null : displayValue(item.value);
|
|
99
|
+
const subject = value === null ? field : `${field}: "${value}"`;
|
|
100
|
+
return `${message} (${subject})`;
|
|
95
101
|
};
|
|
96
102
|
//What a signed-in user reads when the server refuses them (403). A validator's own
|
|
97
103
|
//refusal is "Unauthorized request" on the authorization header: the same words for
|
|
@@ -103,8 +109,16 @@ const isAuthorizationError = (item) => (item.path ?? item.param) === "authorizat
|
|
|
103
109
|
/**
|
|
104
110
|
* True for a 403 that says nothing better than the generic refusal: only a
|
|
105
111
|
* validator's authorization errors, or no message the server wrote itself.
|
|
112
|
+
* A socket event's refusal arrives as the backend's { code, message, details }
|
|
113
|
+
* payload instead: its validators' refusals carry their errors as details,
|
|
114
|
+
* under the same generic message, while a message the server wrote itself has
|
|
115
|
+
* none.
|
|
106
116
|
*/
|
|
107
117
|
const isGenericRefusal = (error) => {
|
|
118
|
+
const payload = error;
|
|
119
|
+
if ((0, socketError_js_1.isSocketError)(payload)) {
|
|
120
|
+
return (payload.code === constants_js_1.RESPONSE_TYPE.FORBIDDEN && Array.isArray(payload.details));
|
|
121
|
+
}
|
|
108
122
|
if (error?.response?.status !== constants_js_1.RESPONSE_TYPE.FORBIDDEN) {
|
|
109
123
|
return false;
|
|
110
124
|
}
|
|
@@ -115,6 +129,32 @@ const isGenericRefusal = (error) => {
|
|
|
115
129
|
}
|
|
116
130
|
return !responseData?.error;
|
|
117
131
|
};
|
|
132
|
+
//What a failure reads as when nothing more specific can be said about it
|
|
133
|
+
const UNKNOWN_ERROR = "Unknown error";
|
|
134
|
+
/**
|
|
135
|
+
* The message a server response carries, most specific first: the validation
|
|
136
|
+
* errors, the server's own message, then whatever else the response offers.
|
|
137
|
+
* @param {AxiosResponse} response
|
|
138
|
+
* @returns {string}
|
|
139
|
+
*/
|
|
140
|
+
const responseToString = (response) => {
|
|
141
|
+
const responseData = response.data;
|
|
142
|
+
if (Array.isArray(responseData.errors)) {
|
|
143
|
+
return responseData.errors
|
|
144
|
+
.map((item) => validationErrorToString(item))
|
|
145
|
+
.join("; ");
|
|
146
|
+
}
|
|
147
|
+
if (responseData.error) {
|
|
148
|
+
return responseData.error;
|
|
149
|
+
}
|
|
150
|
+
if (responseData.errors) {
|
|
151
|
+
return JSON.stringify(responseData.errors);
|
|
152
|
+
}
|
|
153
|
+
if (response.statusText) {
|
|
154
|
+
return response.statusText.toString();
|
|
155
|
+
}
|
|
156
|
+
return responseData.toString();
|
|
157
|
+
};
|
|
118
158
|
/**
|
|
119
159
|
* Returns the error as a string. A permission refusal (403) reads as
|
|
120
160
|
* FORBIDDEN_MESSAGE unless the server wrote a message of its own for it.
|
|
@@ -126,37 +166,16 @@ const errorToString = (error) => {
|
|
|
126
166
|
return exports.FORBIDDEN_MESSAGE;
|
|
127
167
|
}
|
|
128
168
|
try {
|
|
129
|
-
if (error
|
|
130
|
-
|
|
131
|
-
const responseData = error.response.data;
|
|
132
|
-
if (Array.isArray(responseData.errors)) {
|
|
133
|
-
return responseData.errors
|
|
134
|
-
.map((item) => validationErrorToString(item))
|
|
135
|
-
.join("; ");
|
|
136
|
-
}
|
|
137
|
-
else if (responseData.error) {
|
|
138
|
-
return responseData.error;
|
|
139
|
-
}
|
|
140
|
-
else if (responseData.errors) {
|
|
141
|
-
return JSON.stringify(responseData.errors);
|
|
142
|
-
}
|
|
143
|
-
else if (error.response.statusText) {
|
|
144
|
-
return error.response.statusText.toString();
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
return responseData.toString();
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
return error.message ? error.message : "Unknown error";
|
|
152
|
-
}
|
|
169
|
+
if (error == null) {
|
|
170
|
+
return UNKNOWN_ERROR;
|
|
153
171
|
}
|
|
154
|
-
|
|
155
|
-
return
|
|
172
|
+
if (error.response?.data) {
|
|
173
|
+
return responseToString(error.response);
|
|
156
174
|
}
|
|
175
|
+
return error.message || UNKNOWN_ERROR;
|
|
157
176
|
}
|
|
158
177
|
catch {
|
|
159
|
-
return
|
|
178
|
+
return UNKNOWN_ERROR;
|
|
160
179
|
}
|
|
161
180
|
};
|
|
162
181
|
exports.errorToString = errorToString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axiosClient.js","sourceRoot":"","sources":["../../../src/lib/axiosClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAyD;AACzD,iDAA+C;AAC/C,kDAAoC;AAkBpC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;AAEtB,QAAA,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;IACjC,OAAO,EAAE,OAAO;IAChB,eAAe,EAAE,IAAI;CACtB,CAAC,CAAC;AAEH,mFAAmF;AACnF,mFAAmF;AACnF,wCAAwC;AACxC,MAAM,eAAe,GAAG;IACtB,UAAU;IACV,aAAa;IACb,iBAAiB;IACjB,OAAO;IACP,QAAQ;IACR,eAAe;IACf,QAAQ;IACR,aAAa;IACb,cAAc;CACf,CAAC;AAEF,sFAAsF;AACtF,gBAAgB;AAChB,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B
|
|
1
|
+
{"version":3,"file":"axiosClient.js","sourceRoot":"","sources":["../../../src/lib/axiosClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axiosClient.d.ts","sourceRoot":"","sources":["../../../src/lib/axiosClient.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,UAAU,EAAiB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"axiosClient.d.ts","sourceRoot":"","sources":["../../../src/lib/axiosClient.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,UAAU,EAAiB,MAAM,OAAO,CAAC;AAuBzD,eAAO,MAAM,MAAM,+BAGjB,CAAC;AAgEH,eAAO,MAAM,iBAAiB,6EAC8C,CAAC;AA4D7E;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,UAAU,KAAG,MAejD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,UAAU,KAAG,MAIhD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,UAAU,KAChB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAKnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,qBAAqB,OAAO,EAC5B,OAAO,UAAU,KAChB,OAMF,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import axios from "axios";
|
|
2
2
|
import { RESPONSE_TYPE } from "./constants.js";
|
|
3
|
+
import { isSocketError } from "./socketError.js";
|
|
3
4
|
import * as utils from "./utils.js";
|
|
4
5
|
const baseUrl = utils.getBaseUrl();
|
|
5
6
|
export const client = axios.create({
|
|
@@ -23,6 +24,22 @@ const REDACTED_FIELDS = [
|
|
|
23
24
|
//Long values (a pasted document, a base64 blob) would bury the message they are meant
|
|
24
25
|
//to illustrate.
|
|
25
26
|
const MAX_VALUE_LENGTH = 60;
|
|
27
|
+
/**
|
|
28
|
+
* The rejected value as it should appear in a message: null when there is nothing
|
|
29
|
+
* worth showing, cut short when it would bury the message it illustrates.
|
|
30
|
+
*/
|
|
31
|
+
const displayValue = (value) => {
|
|
32
|
+
if (value === null || value === undefined) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const text = typeof value === "object" ? JSON.stringify(value) : String(value);
|
|
36
|
+
if (text.length === 0) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
return text.length > MAX_VALUE_LENGTH
|
|
40
|
+
? `${text.slice(0, MAX_VALUE_LENGTH)}…`
|
|
41
|
+
: text;
|
|
42
|
+
};
|
|
26
43
|
/**
|
|
27
44
|
* Renders one validation error as a sentence: the server's message, then the field it
|
|
28
45
|
* is about and the value that was rejected.
|
|
@@ -39,20 +56,9 @@ const validationErrorToString = (item) => {
|
|
|
39
56
|
return message;
|
|
40
57
|
}
|
|
41
58
|
const redacted = REDACTED_FIELDS.indexOf(field.toLowerCase()) >= 0;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
typeof item.value === "object"
|
|
46
|
-
? JSON.stringify(item.value)
|
|
47
|
-
: String(item.value);
|
|
48
|
-
if (value.length === 0) {
|
|
49
|
-
value = null;
|
|
50
|
-
}
|
|
51
|
-
else if (value.length > MAX_VALUE_LENGTH) {
|
|
52
|
-
value = `${value.slice(0, MAX_VALUE_LENGTH)}…`;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return `${message} (${field}${value === null ? "" : `: "${value}"`})`;
|
|
59
|
+
const value = redacted ? null : displayValue(item.value);
|
|
60
|
+
const subject = value === null ? field : `${field}: "${value}"`;
|
|
61
|
+
return `${message} (${subject})`;
|
|
56
62
|
};
|
|
57
63
|
//What a signed-in user reads when the server refuses them (403). A validator's own
|
|
58
64
|
//refusal is "Unauthorized request" on the authorization header: the same words for
|
|
@@ -64,8 +70,16 @@ const isAuthorizationError = (item) => (item.path ?? item.param) === "authorizat
|
|
|
64
70
|
/**
|
|
65
71
|
* True for a 403 that says nothing better than the generic refusal: only a
|
|
66
72
|
* validator's authorization errors, or no message the server wrote itself.
|
|
73
|
+
* A socket event's refusal arrives as the backend's { code, message, details }
|
|
74
|
+
* payload instead: its validators' refusals carry their errors as details,
|
|
75
|
+
* under the same generic message, while a message the server wrote itself has
|
|
76
|
+
* none.
|
|
67
77
|
*/
|
|
68
78
|
const isGenericRefusal = (error) => {
|
|
79
|
+
const payload = error;
|
|
80
|
+
if (isSocketError(payload)) {
|
|
81
|
+
return (payload.code === RESPONSE_TYPE.FORBIDDEN && Array.isArray(payload.details));
|
|
82
|
+
}
|
|
69
83
|
if (error?.response?.status !== RESPONSE_TYPE.FORBIDDEN) {
|
|
70
84
|
return false;
|
|
71
85
|
}
|
|
@@ -76,6 +90,32 @@ const isGenericRefusal = (error) => {
|
|
|
76
90
|
}
|
|
77
91
|
return !responseData?.error;
|
|
78
92
|
};
|
|
93
|
+
//What a failure reads as when nothing more specific can be said about it
|
|
94
|
+
const UNKNOWN_ERROR = "Unknown error";
|
|
95
|
+
/**
|
|
96
|
+
* The message a server response carries, most specific first: the validation
|
|
97
|
+
* errors, the server's own message, then whatever else the response offers.
|
|
98
|
+
* @param {AxiosResponse} response
|
|
99
|
+
* @returns {string}
|
|
100
|
+
*/
|
|
101
|
+
const responseToString = (response) => {
|
|
102
|
+
const responseData = response.data;
|
|
103
|
+
if (Array.isArray(responseData.errors)) {
|
|
104
|
+
return responseData.errors
|
|
105
|
+
.map((item) => validationErrorToString(item))
|
|
106
|
+
.join("; ");
|
|
107
|
+
}
|
|
108
|
+
if (responseData.error) {
|
|
109
|
+
return responseData.error;
|
|
110
|
+
}
|
|
111
|
+
if (responseData.errors) {
|
|
112
|
+
return JSON.stringify(responseData.errors);
|
|
113
|
+
}
|
|
114
|
+
if (response.statusText) {
|
|
115
|
+
return response.statusText.toString();
|
|
116
|
+
}
|
|
117
|
+
return responseData.toString();
|
|
118
|
+
};
|
|
79
119
|
/**
|
|
80
120
|
* Returns the error as a string. A permission refusal (403) reads as
|
|
81
121
|
* FORBIDDEN_MESSAGE unless the server wrote a message of its own for it.
|
|
@@ -87,37 +127,16 @@ export const errorToString = (error) => {
|
|
|
87
127
|
return FORBIDDEN_MESSAGE;
|
|
88
128
|
}
|
|
89
129
|
try {
|
|
90
|
-
if (error
|
|
91
|
-
|
|
92
|
-
const responseData = error.response.data;
|
|
93
|
-
if (Array.isArray(responseData.errors)) {
|
|
94
|
-
return responseData.errors
|
|
95
|
-
.map((item) => validationErrorToString(item))
|
|
96
|
-
.join("; ");
|
|
97
|
-
}
|
|
98
|
-
else if (responseData.error) {
|
|
99
|
-
return responseData.error;
|
|
100
|
-
}
|
|
101
|
-
else if (responseData.errors) {
|
|
102
|
-
return JSON.stringify(responseData.errors);
|
|
103
|
-
}
|
|
104
|
-
else if (error.response.statusText) {
|
|
105
|
-
return error.response.statusText.toString();
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
return responseData.toString();
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
return error.message ? error.message : "Unknown error";
|
|
113
|
-
}
|
|
130
|
+
if (error == null) {
|
|
131
|
+
return UNKNOWN_ERROR;
|
|
114
132
|
}
|
|
115
|
-
|
|
116
|
-
return
|
|
133
|
+
if (error.response?.data) {
|
|
134
|
+
return responseToString(error.response);
|
|
117
135
|
}
|
|
136
|
+
return error.message || UNKNOWN_ERROR;
|
|
118
137
|
}
|
|
119
138
|
catch {
|
|
120
|
-
return
|
|
139
|
+
return UNKNOWN_ERROR;
|
|
121
140
|
}
|
|
122
141
|
};
|
|
123
142
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axiosClient.js","sourceRoot":"","sources":["../../../src/lib/axiosClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAoC,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAkBpC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;AAEnC,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IACjC,OAAO,EAAE,OAAO;IAChB,eAAe,EAAE,IAAI;CACtB,CAAC,CAAC;AAEH,mFAAmF;AACnF,mFAAmF;AACnF,wCAAwC;AACxC,MAAM,eAAe,GAAG;IACtB,UAAU;IACV,aAAa;IACb,iBAAiB;IACjB,OAAO;IACP,QAAQ;IACR,eAAe;IACf,QAAQ;IACR,aAAa;IACb,cAAc;CACf,CAAC;AAEF,sFAAsF;AACtF,gBAAgB;AAChB,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B
|
|
1
|
+
{"version":3,"file":"axiosClient.js","sourceRoot":"","sources":["../../../src/lib/axiosClient.ts"],"names":[],"mappings":"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"}
|