Skip to content

Commit

Permalink
Merge branch 'release-3.1.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
yukipastelcat committed Feb 21, 2024
2 parents f2c7ac0 + 8dd164a commit c2ae7b3
Show file tree
Hide file tree
Showing 8 changed files with 738 additions and 104 deletions.
3 changes: 2 additions & 1 deletion environment/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ define(['/node_modules/@oat-sa/tao-core-libs/dist/pathdefinition.js'], function(
'jquery.mockjax': '/node_modules/jquery-mockjax/dist/jquery.mockjax',
'webcrypto-shim': '/node_modules/webcrypto-shim/webcrypto-shim',
'idb-wrapper': '/node_modules/idb-wrapper/idbstore',
'fetch-mock': '/node_modules/fetch-mock/es5/client-bundle'
'fetch-mock': '/node_modules/fetch-mock/es5/client-bundle',
'xhr-mock': '/node_modules/xhr-mock/dist/xhr-mock'
},
libPathDefinition
),
Expand Down
84 changes: 83 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@oat-sa/tao-core-sdk",
"version": "3.0.0",
"version": "3.1.0",
"displayName": "TAO Core SDK",
"description": "Core libraries of TAO",
"homepage": "https://github.com/oat-sa/tao-core-sdk-fe#readme",
Expand Down Expand Up @@ -82,7 +82,8 @@
"rollup-plugin-json": "^4.0.0",
"rollup-plugin-node-resolve": "^5.2.0",
"select2": "3.5.1",
"tooltip.js": "1.3.3"
"tooltip.js": "1.3.3",
"xhr-mock": "^2.5.1"
},
"dependencies": {
"fastestsmallesttextencoderdecoder": "1.0.14",
Expand Down
103 changes: 3 additions & 100 deletions src/core/fetchRequest.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,9 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Copyright (c) 2020-21 (original work) Open Assessment Technologies SA ;
* Copyright (c) 2020-2024 (original work) Open Assessment Technologies SA ;
*/

import ApiError from 'core/error/ApiError';
import NetworkError from 'core/error/NetworkError';
import TimeoutError from 'core/error/TimeoutError';
import httpRequestFlowFactory from 'core/request/flowFactory';

/**
* !!! IE11 requires polyfill https://www.npmjs.com/package/whatwg-fetch
Expand All @@ -41,101 +38,7 @@ const requestFactory = (url, options) => {
options
);

let flow = Promise.resolve();

if (options.jwtTokenHandler) {
flow = flow
.then(options.jwtTokenHandler.getToken)
.then(token => ({
Authorization: `Bearer ${token}`
}))
.then(headers => {
options.headers = Object.assign({}, options.headers, headers);
});
}

flow = flow.then(() =>
Promise.race([
fetch(url, options),
new Promise((resolve, reject) => {
setTimeout(() => {
reject(new TimeoutError('Timeout', options.timeout));
}, options.timeout);
})
])
);

if (options.jwtTokenHandler) {
flow = flow.then(response => {
if (response.status === 401) {
return options.jwtTokenHandler
.refreshToken()
.then(options.jwtTokenHandler.getToken)
.then(token => {
options.headers.Authorization = `Bearer ${token}`;
return fetch(url, options);
});
}

return Promise.resolve(response);
});
}

/**
* Stores the original response
*/
let originalResponse;
/**
* Stores the response code
*/
let responseCode;

flow = flow
.then(response => {
originalResponse = response.clone();
responseCode = response.status;

if (options.returnOriginalResponse) {
return originalResponse;
}
return response.json().catch(() => ({}));
})
.then(response => {
if (responseCode === 204) {
return null;
}

// successful request
if ((responseCode >= 200 && responseCode < 300) || (response && response.success === true)) {
return response;
}

// create error
let err;
if (response.errorCode) {
err = new ApiError(
`${response.errorCode} : ${response.errorMsg || response.errorMessage || response.error}`,
response.errorCode,
originalResponse
);
} else {
err = new NetworkError(
`${responseCode} : Request error`,
responseCode || 0,
originalResponse
);
}
throw err;
})
.catch(err => {
if (!err.type) {
//offline, CORS, etc.
return Promise.reject(new NetworkError(err.message, 0));
}
return Promise.reject(err);
});

return flow;
return httpRequestFlowFactory(fetch, url, options);
};

export default requestFactory;
Loading

0 comments on commit c2ae7b3

Please sign in to comment.