@atlaskit/util-service-support 6.0.2 → 6.1.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/CHANGELOG.md +24 -0
- package/build/tsconfig.json +6 -2
- package/dist/cjs/index.js +46 -7
- package/dist/cjs/serviceResources.js +71 -43
- package/dist/cjs/serviceUtils.js +131 -90
- package/dist/cjs/types.js +23 -4
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/index.js +1 -2
- package/dist/es2019/serviceResources.js +48 -40
- package/dist/es2019/serviceUtils.js +106 -87
- package/dist/es2019/types.js +15 -3
- package/dist/es2019/version.json +1 -1
- package/dist/esm/index.js +1 -2
- package/dist/esm/serviceResources.js +61 -42
- package/dist/esm/serviceUtils.js +122 -90
- package/dist/esm/types.js +15 -3
- package/dist/esm/version.json +1 -1
- package/dist/types/types.d.ts +1 -0
- package/package.json +7 -6
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/serviceResources.js.map +0 -1
- package/dist/cjs/serviceUtils.js.map +0 -1
- package/dist/cjs/types.js.map +0 -1
- package/dist/es2019/index.d.ts +0 -4
- package/dist/es2019/index.js.map +0 -1
- package/dist/es2019/serviceResources.d.ts +0 -12
- package/dist/es2019/serviceResources.js.map +0 -1
- package/dist/es2019/serviceUtils.d.ts +0 -5
- package/dist/es2019/serviceUtils.js.map +0 -1
- package/dist/es2019/types.d.ts +0 -79
- package/dist/es2019/types.js.map +0 -1
- package/dist/esm/index.d.ts +0 -4
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/serviceResources.d.ts +0 -12
- package/dist/esm/serviceResources.js.map +0 -1
- package/dist/esm/serviceUtils.d.ts +0 -5
- package/dist/esm/serviceUtils.js.map +0 -1
- package/dist/esm/types.d.ts +0 -79
- package/dist/esm/types.js.map +0 -1
|
@@ -1,104 +1,123 @@
|
|
|
1
|
-
import
|
|
2
|
-
import USP from 'url-search-params'; // IE, Safari, Mobile Chrome, Mobile Safari
|
|
3
|
-
import { buildCredentials, } from './types';
|
|
4
|
-
const URLSearchParams = USP.default || USP;
|
|
1
|
+
import { buildCredentials } from './types';
|
|
5
2
|
const defaultRequestServiceOptions = {};
|
|
3
|
+
|
|
6
4
|
const buildUrl = (baseUrl, path = '', queryParams, secOptions) => {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
const searchParam = new URLSearchParams( // For relative urls, the URL class requires base to be set. It's ignored if a url is not relative.
|
|
6
|
+
// Since we only care about search params it is fine to have any base url here.
|
|
7
|
+
new URL(baseUrl, 'https://BASE_FALLBACK').search || undefined);
|
|
8
|
+
baseUrl = baseUrl.split('?')[0];
|
|
9
|
+
|
|
10
|
+
if (queryParams) {
|
|
11
|
+
for (const key in queryParams) {
|
|
12
|
+
if ({}.hasOwnProperty.call(queryParams, key)) {
|
|
13
|
+
searchParam.append(key, queryParams[key]);
|
|
14
|
+
}
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (secOptions && secOptions.params) {
|
|
19
|
+
for (const key in secOptions.params) {
|
|
20
|
+
if ({}.hasOwnProperty.call(secOptions.params, key)) {
|
|
21
|
+
const values = secOptions.params[key];
|
|
22
|
+
|
|
23
|
+
if (Array.isArray(values)) {
|
|
24
|
+
for (let i = 0; i < values.length; i++) {
|
|
25
|
+
searchParam.append(key, values[i]);
|
|
26
|
+
}
|
|
27
|
+
} else {
|
|
28
|
+
searchParam.append(key, values);
|
|
29
29
|
}
|
|
30
|
+
}
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
let separator = '';
|
|
35
|
+
|
|
36
|
+
if (path && baseUrl.substr(-1) !== '/' && !path.startsWith('/')) {
|
|
37
|
+
separator = '/';
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
let params = searchParam.toString();
|
|
41
|
+
|
|
42
|
+
if (params) {
|
|
43
|
+
params = '?' + params;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return `${baseUrl}${separator}${path}${params}`;
|
|
40
47
|
};
|
|
48
|
+
|
|
41
49
|
const addToHeaders = (headers, keyValues) => {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
}
|
|
50
|
+
if (keyValues) {
|
|
51
|
+
for (const key in keyValues) {
|
|
52
|
+
if ({}.hasOwnProperty.call(keyValues, key)) {
|
|
53
|
+
const values = keyValues[key];
|
|
54
|
+
|
|
55
|
+
if (Array.isArray(values)) {
|
|
56
|
+
for (let i = 0; i < values.length; i++) {
|
|
57
|
+
headers[key] = values[i];
|
|
58
|
+
}
|
|
59
|
+
} else {
|
|
60
|
+
headers[key] = values;
|
|
55
61
|
}
|
|
62
|
+
}
|
|
56
63
|
}
|
|
64
|
+
}
|
|
57
65
|
};
|
|
66
|
+
|
|
58
67
|
const buildHeaders = (secOptions, extraHeaders) => {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
68
|
+
const headers = {};
|
|
69
|
+
addToHeaders(headers, extraHeaders);
|
|
70
|
+
|
|
71
|
+
if (secOptions) {
|
|
72
|
+
addToHeaders(headers, secOptions.headers);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return headers;
|
|
65
76
|
};
|
|
66
77
|
/**
|
|
67
78
|
* @returns Promise containing the json response
|
|
68
79
|
*/
|
|
80
|
+
|
|
81
|
+
|
|
69
82
|
export const requestService = (serviceConfig, options) => {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
83
|
+
const {
|
|
84
|
+
url,
|
|
85
|
+
securityProvider,
|
|
86
|
+
refreshedSecurityProvider
|
|
87
|
+
} = serviceConfig;
|
|
88
|
+
const {
|
|
89
|
+
path,
|
|
90
|
+
queryParams,
|
|
91
|
+
requestInit
|
|
92
|
+
} = options || defaultRequestServiceOptions;
|
|
93
|
+
const secOptions = securityProvider && securityProvider();
|
|
94
|
+
const requestUrl = buildUrl(url, path, queryParams, secOptions);
|
|
95
|
+
const headers = buildHeaders(secOptions, requestInit && requestInit.headers);
|
|
96
|
+
const credentials = buildCredentials(secOptions);
|
|
97
|
+
const ignoreResponsePayload = (options === null || options === void 0 ? void 0 : options.ignoreResponsePayload) || false;
|
|
98
|
+
const requestOptions = { ...requestInit,
|
|
99
|
+
headers,
|
|
100
|
+
credentials
|
|
101
|
+
};
|
|
102
|
+
return fetch(requestUrl, requestOptions).then(response => {
|
|
103
|
+
if (response.status === 204) {
|
|
104
|
+
return Promise.resolve();
|
|
105
|
+
} else if (response.ok) {
|
|
106
|
+
return ignoreResponsePayload ? Promise.resolve() : response.json();
|
|
107
|
+
} else if (response.status === 401 && refreshedSecurityProvider) {
|
|
108
|
+
// auth issue - try once
|
|
109
|
+
return refreshedSecurityProvider().then(newSecOptions => {
|
|
110
|
+
const retryServiceConfig = {
|
|
111
|
+
url,
|
|
112
|
+
securityProvider: () => newSecOptions
|
|
113
|
+
};
|
|
114
|
+
return requestService(retryServiceConfig, options);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return Promise.reject({
|
|
119
|
+
code: response.status,
|
|
120
|
+
reason: response.statusText
|
|
102
121
|
});
|
|
103
|
-
};
|
|
104
|
-
|
|
122
|
+
});
|
|
123
|
+
};
|
package/dist/es2019/types.js
CHANGED
|
@@ -1,4 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Defines a typical Resource.
|
|
3
|
+
*
|
|
4
|
+
* Q = query type
|
|
5
|
+
* R = result type
|
|
6
|
+
* E = error type
|
|
7
|
+
* I = info type
|
|
8
|
+
* O = options that filter can accept
|
|
9
|
+
*/
|
|
10
|
+
export const buildCredentials = secOptions => {
|
|
11
|
+
return secOptions && secOptions.omitCredentials ? 'omit' : 'include';
|
|
3
12
|
};
|
|
4
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Returns a promise to a SecurityOptions that has just been forcibly refreshed with a
|
|
15
|
+
* new token. Will be used for single retry per request if a 401 is returned.
|
|
16
|
+
*/
|
package/dist/es2019/version.json
CHANGED
package/dist/esm/index.js
CHANGED
|
@@ -1,44 +1,63 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
2
|
+
import _createClass from "@babel/runtime/helpers/createClass";
|
|
3
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
4
|
+
export var AbstractResource = /*#__PURE__*/function () {
|
|
5
|
+
function AbstractResource() {
|
|
6
|
+
_classCallCheck(this, AbstractResource);
|
|
7
|
+
|
|
8
|
+
_defineProperty(this, "listeners", new Set());
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
_createClass(AbstractResource, [{
|
|
12
|
+
key: "subscribe",
|
|
13
|
+
value: function subscribe(onChange) {
|
|
14
|
+
this.listeners.add(onChange);
|
|
15
|
+
|
|
16
|
+
if (this.lastResult) {
|
|
17
|
+
// Notify subscribe of last result (i.e. initial state)
|
|
18
|
+
onChange.result(this.lastResult);
|
|
19
|
+
}
|
|
4
20
|
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
21
|
+
}, {
|
|
22
|
+
key: "unsubscribe",
|
|
23
|
+
value: function unsubscribe(onChange) {
|
|
24
|
+
this.listeners.delete(onChange);
|
|
25
|
+
}
|
|
26
|
+
}, {
|
|
27
|
+
key: "notifyResult",
|
|
28
|
+
value: function notifyResult(result) {
|
|
29
|
+
this.listeners.forEach(function (onChange) {
|
|
30
|
+
onChange.result(result);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}, {
|
|
34
|
+
key: "notifyError",
|
|
35
|
+
value: function notifyError(error) {
|
|
36
|
+
this.listeners.forEach(function (onChange) {
|
|
37
|
+
if (onChange.error) {
|
|
38
|
+
onChange.error(error);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}, {
|
|
43
|
+
key: "notifyInfo",
|
|
44
|
+
value: function notifyInfo(info) {
|
|
45
|
+
this.listeners.forEach(function (onChange) {
|
|
46
|
+
if (onChange.info) {
|
|
47
|
+
onChange.info(info);
|
|
10
48
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
};
|
|
27
|
-
AbstractResource.prototype.notifyInfo = function (info) {
|
|
28
|
-
this.listeners.forEach(function (onChange) {
|
|
29
|
-
if (onChange.info) {
|
|
30
|
-
onChange.info(info);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
AbstractResource.prototype.notifyNotReady = function () {
|
|
35
|
-
this.listeners.forEach(function (onChange) {
|
|
36
|
-
if (onChange.notReady) {
|
|
37
|
-
onChange.notReady();
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
};
|
|
41
|
-
return AbstractResource;
|
|
42
|
-
}());
|
|
43
|
-
export { AbstractResource };
|
|
44
|
-
//# sourceMappingURL=serviceResources.js.map
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}, {
|
|
52
|
+
key: "notifyNotReady",
|
|
53
|
+
value: function notifyNotReady() {
|
|
54
|
+
this.listeners.forEach(function (onChange) {
|
|
55
|
+
if (onChange.notReady) {
|
|
56
|
+
onChange.notReady();
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}]);
|
|
61
|
+
|
|
62
|
+
return AbstractResource;
|
|
63
|
+
}();
|
package/dist/esm/serviceUtils.js
CHANGED
|
@@ -1,103 +1,135 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
|
|
3
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
4
|
+
|
|
5
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
6
|
+
|
|
7
|
+
import { buildCredentials } from './types';
|
|
6
8
|
var defaultRequestServiceOptions = {};
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
|
|
10
|
+
var buildUrl = function buildUrl(baseUrl) {
|
|
11
|
+
var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
12
|
+
var queryParams = arguments.length > 2 ? arguments[2] : undefined;
|
|
13
|
+
var secOptions = arguments.length > 3 ? arguments[3] : undefined;
|
|
14
|
+
var searchParam = new URLSearchParams( // For relative urls, the URL class requires base to be set. It's ignored if a url is not relative.
|
|
15
|
+
// Since we only care about search params it is fine to have any base url here.
|
|
16
|
+
new URL(baseUrl, 'https://BASE_FALLBACK').search || undefined);
|
|
17
|
+
baseUrl = baseUrl.split('?')[0];
|
|
18
|
+
|
|
19
|
+
if (queryParams) {
|
|
20
|
+
for (var key in queryParams) {
|
|
21
|
+
if ({}.hasOwnProperty.call(queryParams, key)) {
|
|
22
|
+
searchParam.append(key, queryParams[key]);
|
|
23
|
+
}
|
|
17
24
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (secOptions && secOptions.params) {
|
|
28
|
+
for (var _key in secOptions.params) {
|
|
29
|
+
if ({}.hasOwnProperty.call(secOptions.params, _key)) {
|
|
30
|
+
var values = secOptions.params[_key];
|
|
31
|
+
|
|
32
|
+
if (Array.isArray(values)) {
|
|
33
|
+
for (var i = 0; i < values.length; i++) {
|
|
34
|
+
searchParam.append(_key, values[i]);
|
|
35
|
+
}
|
|
36
|
+
} else {
|
|
37
|
+
searchParam.append(_key, values);
|
|
31
38
|
}
|
|
39
|
+
}
|
|
32
40
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
var separator = '';
|
|
44
|
+
|
|
45
|
+
if (path && baseUrl.substr(-1) !== '/' && !path.startsWith('/')) {
|
|
46
|
+
separator = '/';
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
var params = searchParam.toString();
|
|
50
|
+
|
|
51
|
+
if (params) {
|
|
52
|
+
params = '?' + params;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return "".concat(baseUrl).concat(separator).concat(path).concat(params);
|
|
42
56
|
};
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
+
|
|
58
|
+
var addToHeaders = function addToHeaders(headers, keyValues) {
|
|
59
|
+
if (keyValues) {
|
|
60
|
+
for (var key in keyValues) {
|
|
61
|
+
if ({}.hasOwnProperty.call(keyValues, key)) {
|
|
62
|
+
var values = keyValues[key];
|
|
63
|
+
|
|
64
|
+
if (Array.isArray(values)) {
|
|
65
|
+
for (var i = 0; i < values.length; i++) {
|
|
66
|
+
headers[key] = values[i];
|
|
67
|
+
}
|
|
68
|
+
} else {
|
|
69
|
+
headers[key] = values;
|
|
57
70
|
}
|
|
71
|
+
}
|
|
58
72
|
}
|
|
73
|
+
}
|
|
59
74
|
};
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
75
|
+
|
|
76
|
+
var buildHeaders = function buildHeaders(secOptions, extraHeaders) {
|
|
77
|
+
var headers = {};
|
|
78
|
+
addToHeaders(headers, extraHeaders);
|
|
79
|
+
|
|
80
|
+
if (secOptions) {
|
|
81
|
+
addToHeaders(headers, secOptions.headers);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return headers;
|
|
67
85
|
};
|
|
68
86
|
/**
|
|
69
87
|
* @returns Promise containing the json response
|
|
70
88
|
*/
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
export var requestService = function requestService(serviceConfig, options) {
|
|
92
|
+
var url = serviceConfig.url,
|
|
93
|
+
securityProvider = serviceConfig.securityProvider,
|
|
94
|
+
refreshedSecurityProvider = serviceConfig.refreshedSecurityProvider;
|
|
95
|
+
|
|
96
|
+
var _ref = options || defaultRequestServiceOptions,
|
|
97
|
+
path = _ref.path,
|
|
98
|
+
queryParams = _ref.queryParams,
|
|
99
|
+
requestInit = _ref.requestInit;
|
|
100
|
+
|
|
101
|
+
var secOptions = securityProvider && securityProvider();
|
|
102
|
+
var requestUrl = buildUrl(url, path, queryParams, secOptions);
|
|
103
|
+
var headers = buildHeaders(secOptions, requestInit && requestInit.headers);
|
|
104
|
+
var credentials = buildCredentials(secOptions);
|
|
105
|
+
var ignoreResponsePayload = (options === null || options === void 0 ? void 0 : options.ignoreResponsePayload) || false;
|
|
106
|
+
|
|
107
|
+
var requestOptions = _objectSpread(_objectSpread({}, requestInit), {}, {
|
|
108
|
+
headers: headers,
|
|
109
|
+
credentials: credentials
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
return fetch(requestUrl, requestOptions).then(function (response) {
|
|
113
|
+
if (response.status === 204) {
|
|
114
|
+
return Promise.resolve();
|
|
115
|
+
} else if (response.ok) {
|
|
116
|
+
return ignoreResponsePayload ? Promise.resolve() : response.json();
|
|
117
|
+
} else if (response.status === 401 && refreshedSecurityProvider) {
|
|
118
|
+
// auth issue - try once
|
|
119
|
+
return refreshedSecurityProvider().then(function (newSecOptions) {
|
|
120
|
+
var retryServiceConfig = {
|
|
121
|
+
url: url,
|
|
122
|
+
securityProvider: function securityProvider() {
|
|
123
|
+
return newSecOptions;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
return requestService(retryServiceConfig, options);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return Promise.reject({
|
|
131
|
+
code: response.status,
|
|
132
|
+
reason: response.statusText
|
|
101
133
|
});
|
|
102
|
-
};
|
|
103
|
-
|
|
134
|
+
});
|
|
135
|
+
};
|
package/dist/esm/types.js
CHANGED
|
@@ -1,4 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Defines a typical Resource.
|
|
3
|
+
*
|
|
4
|
+
* Q = query type
|
|
5
|
+
* R = result type
|
|
6
|
+
* E = error type
|
|
7
|
+
* I = info type
|
|
8
|
+
* O = options that filter can accept
|
|
9
|
+
*/
|
|
10
|
+
export var buildCredentials = function buildCredentials(secOptions) {
|
|
11
|
+
return secOptions && secOptions.omitCredentials ? 'omit' : 'include';
|
|
3
12
|
};
|
|
4
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Returns a promise to a SecurityOptions that has just been forcibly refreshed with a
|
|
15
|
+
* new token. Will be used for single retry per request if a 401 is returned.
|
|
16
|
+
*/
|
package/dist/esm/version.json
CHANGED
package/dist/types/types.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/util-service-support",
|
|
3
|
-
"version": "6.0
|
|
3
|
+
"version": "6.1.0",
|
|
4
4
|
"description": "A library of support classes for integrating React components with REST HTTP services",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -15,18 +15,18 @@
|
|
|
15
15
|
"atlaskit:src": "src/index.ts",
|
|
16
16
|
"atlassian": {
|
|
17
17
|
"deprecatedAutoEntryPoints": true,
|
|
18
|
-
"releaseModel": "continuous"
|
|
18
|
+
"releaseModel": "continuous",
|
|
19
|
+
"team": "AFP: Monorepo"
|
|
19
20
|
},
|
|
20
21
|
"config": {
|
|
21
22
|
"access": "public"
|
|
22
23
|
},
|
|
23
24
|
"dependencies": {
|
|
24
|
-
"
|
|
25
|
-
"url": "^0.11.0",
|
|
26
|
-
"url-search-params": "^0.10.0"
|
|
25
|
+
"@babel/runtime": "^7.0.0"
|
|
27
26
|
},
|
|
28
27
|
"devDependencies": {
|
|
29
28
|
"@atlaskit/docs": "*",
|
|
29
|
+
"@atlassian/atlassian-frontend-prettier-config-1.0.0": "npm:@atlassian/atlassian-frontend-prettier-config@1.0.0",
|
|
30
30
|
"es6-promise": "^4.0.5",
|
|
31
31
|
"fetch-mock": "^8.0.0",
|
|
32
32
|
"sinon": "^2.2.0",
|
|
@@ -41,5 +41,6 @@
|
|
|
41
41
|
"@atlassian/frontend": {
|
|
42
42
|
"tree-shaking": []
|
|
43
43
|
}
|
|
44
|
-
}
|
|
44
|
+
},
|
|
45
|
+
"prettier": "@atlassian/atlassian-frontend-prettier-config-1.0.0"
|
|
45
46
|
}
|